Forum Webscript.Ru
Общие => Веб-технологии => Тема начата: 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?
-
Если не ошибаюсь работа с xml пока что в php - experimental
Я такие ошибки обычно лечу так:
закоментирую весь скрипт
echo "1";
/*
далее твой скрипт
*/
?>
проверяю, выводит ли 1
Далее открываю какую-то часть скрипта:
.. // часть скрипта
echo "1";
/*
остальная часть скрипта
*/
?>
таким образом нахожу какая именно строка выдает ошибку.
Ничего умнее я для решения таких проблем не придумал.
На практике я встречал такое только при использовании virtual(); .
-
Спасибо. Я нашел точную строку где ошибка. Это происходит при чтении из сокета. Но почему? XML кстати не виноват. Он нормально читается. Запросы тоже правильные шлю, под виндой же работает...
-
ну так строку покажи и несколько ближайших.
-
Вот этот метод:
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;
}
-
print $this->result .= fgets($fp,1280);
$this->result = fread($this->fp, 60000000);
почему в одном месте $fp а в другом $this->fp ?
Кстати для работі с сокетами по http есть pear :: http ::request
Может лучше файловый хендлер просто локальной переменной сделать а не $this->fp ? (просто предположение)
-
Спасибо за подсказку. Теперь print $this->result .= fgets($this->fp,1280); работает. Но почему $this->result = fread($this->fp, 60000000); не работало...? Но на этом проблемы не закончились.... Теперь скрипт виснет на вот этой строке
$math=$ereg->get_content();
Он выполняется до неё а потом :-( Те принт до неё выводит а после неё нет...
-
> $math=$ereg->get_content();
если чесно, я понятия не имею, что у тебя внутри этого метода ;) поэтому ничем не могу помочь :(
-
$ereg это обьект типа XML node. Этот метод стандартный. Он возвращает контент узла. (те содержимое тега).