Forum Webscript.Ru

Общие => Веб-технологии => Тема начата: Diesel от 04 Марта 2003, 17:05:22

Название: Ответ нулевой длинны
Отправлено: Diesel от 04 Марта 2003, 17:05:22
Скрипт посылает HTTP запросы на сайты через сокет и получает ответ котрый затем парсится и заносится в БД. Под Win2k PHP 4.3 работает. Когда закачиваю на сервер под линух PHP 4.2 выдаёт

ОШИБКА
Запрошенный URL не может быть доставлен
--------------------------------------------------------------------------------
Во время доставки URL: http://soff.ifrigate.ru/scanner.php

Произошла следующая ошибка:

Ответ нулевой длины
Кэш не получил никаких данных в ответ на этот запрос.
--------------------------------------------------------------------------------
Generated Tue, 04 Mar 2003 13:39:04 GMT by if8 (squid/2.5.STABLE1)

Сам скрипт не привожу тк он большой... Да и вещи там вполне заурядные... Открывается сокет, читается хмл...
Данные для каждого сайта читаются из XML и на их основе строится запрос котрый и шлётся на сервер. phpinfo() говорит что PHP поддерживает и xml и xpath и сокеты. Сам не на что не ругается, никаких ошибок не выдает, но при попытке чтения из сокета получаю ошибку. Может что то в настройках сервера или PHP?
Название: Ответ нулевой длинны
Отправлено: Макс от 04 Марта 2003, 19:12:46
Если не ошибаюсь работа с xml пока что в php - experimental
Я такие ошибки обычно лечу так:
закоментирую весь скрипт
echo "1";
/*
далее твой скрипт
*/
?>
проверяю, выводит ли 1
Далее открываю какую-то часть скрипта:
.. // часть скрипта
echo "1";
/*
остальная часть скрипта
*/
?>
таким образом нахожу какая именно строка выдает ошибку.
Ничего умнее я для решения таких проблем не придумал.
На практике я встречал такое только при использовании virtual(); .
Название: Ответ нулевой длинны
Отправлено: Diesel от 04 Марта 2003, 19:27:27
Спасибо. Я нашел точную строку где ошибка. Это происходит при чтении из сокета. Но почему? XML кстати не виноват. Он нормально читается. Запросы тоже правильные шлю, под виндой же работает...
Название: Ответ нулевой длинны
Отправлено: Макс от 04 Марта 2003, 19:30:58
ну так строку покажи и несколько ближайших.
Название: Ответ нулевой длинны
Отправлено: Diesel от 04 Марта 2003, 19:47:58
Вот этот метод:
function get_result()
{
 if (isset($this->fp))
 {
  while (!feof($this->fp))
   print $this->result .= fgets($fp,1280);
//Ещё и так пробовал
//  $this->result = fread($this->fp, 60000000);
  $this->all_content.=$this->result;
  return $this->result;
 }
 else
  return 0;
}
Название: Ответ нулевой длинны
Отправлено: Макс от 04 Марта 2003, 19:56:57
Цитировать
print $this->result .= fgets($fp,1280);
Цитировать
$this->result = fread($this->fp, 60000000);
почему в одном месте $fp а в другом $this->fp ?
Кстати для работі с сокетами по http есть pear :: http ::request

Может лучше файловый хендлер просто локальной переменной сделать а не $this->fp ? (просто предположение)
Название: Ответ нулевой длинны
Отправлено: Diesel от 04 Марта 2003, 20:51:28
Спасибо за подсказку. Теперь print $this->result .= fgets($this->fp,1280); работает. Но почему $this->result = fread($this->fp, 60000000); не работало...? Но на этом проблемы не закончились.... Теперь скрипт виснет на вот этой строке
$math=$ereg->get_content();
Он выполняется до неё а потом :-( Те принт до неё выводит а после неё нет...
Название: Ответ нулевой длинны
Отправлено: Макс от 04 Марта 2003, 22:45:12
> $math=$ereg->get_content();

если чесно, я понятия не имею, что у тебя внутри этого метода ;) поэтому ничем не могу помочь :(
Название: Ответ нулевой длинны
Отправлено: Diesel от 05 Марта 2003, 09:54:02
$ereg это обьект типа XML node. Этот метод стандартный. Он возвращает контент узла. (те содержимое тега).