Автор Тема: Ответ нулевой длинны  (Прочитано 7848 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Diesel

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 69
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ответ нулевой длинны
« : 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?

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Ответ нулевой длинны
« Ответ #1 : 04 Марта 2003, 19:12:46 »
Если не ошибаюсь работа с xml пока что в php - experimental
Я такие ошибки обычно лечу так:
закоментирую весь скрипт
echo "1";
/*
далее твой скрипт
*/
?>
проверяю, выводит ли 1
Далее открываю какую-то часть скрипта:
.. // часть скрипта
echo "1";
/*
остальная часть скрипта
*/
?>
таким образом нахожу какая именно строка выдает ошибку.
Ничего умнее я для решения таких проблем не придумал.
На практике я встречал такое только при использовании virtual(); .
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Diesel

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 69
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ответ нулевой длинны
« Ответ #2 : 04 Марта 2003, 19:27:27 »
Спасибо. Я нашел точную строку где ошибка. Это происходит при чтении из сокета. Но почему? XML кстати не виноват. Он нормально читается. Запросы тоже правильные шлю, под виндой же работает...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Ответ нулевой длинны
« Ответ #3 : 04 Марта 2003, 19:30:58 »
ну так строку покажи и несколько ближайших.
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Diesel

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 69
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ответ нулевой длинны
« Ответ #4 : 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;
}

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Ответ нулевой длинны
« Ответ #5 : 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 ? (просто предположение)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Diesel

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 69
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ответ нулевой длинны
« Ответ #6 : 04 Марта 2003, 20:51:28 »
Спасибо за подсказку. Теперь print $this->result .= fgets($this->fp,1280); работает. Но почему $this->result = fread($this->fp, 60000000); не работало...? Но на этом проблемы не закончились.... Теперь скрипт виснет на вот этой строке
$math=$ereg->get_content();
Он выполняется до неё а потом :-( Те принт до неё выводит а после неё нет...

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Ответ нулевой длинны
« Ответ #7 : 04 Марта 2003, 22:45:12 »
> $math=$ereg->get_content();

если чесно, я понятия не имею, что у тебя внутри этого метода ;) поэтому ничем не могу помочь :(
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Diesel

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 69
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Ответ нулевой длинны
« Ответ #8 : 05 Марта 2003, 09:54:02 »
$ereg это обьект типа XML node. Этот метод стандартный. Он возвращает контент узла. (те содержимое тега).

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28