fgetc() ошибки в чтении

RT V?

Новичок
fgetc() ошибки в чтении

Проблема такова: при чтении с сокета, в полученном тексте появляются иногода "левые" символы:), если смотреть браузером, то всё ок естессно:)
вот кусок кода:)
PHP:
$link = fsockopen($hostip, 80);
...
$data = "";
stream_set_timeout($link, 8);
while(!feof($link))$data .= fgetc($link);
$linkInfo = stream_get_meta_data($link);
fclose($link);
кусок из $data:
PHP:
<td class="tab-active">Везде        </
400
td>
а должно быть:
PHP:
<td class="tab-active">Везде        </td>
и такой появляется в нескольких местах, в основном именно "400":) а иногда и не появляется
хелп плиз!

PHP Version 4.4.0
Windows NT 5.1 build 2600
 

chisto_tolyan

Враг народа
тогда делай дебуг, смотри в какой строчке, после каких символов появляется лишний символ. а вообще интересно)
 

RT V?

Новичок
появляется произвольно в разных местах:) иногда бывает что и не появляется, но оч редко
имхо ошибка вообще не тут:) тогда где? вроде ошибаться то негде:)
з.ы. это как бы парсинг выдачи яндекса, мож яндекс сам такую фигню мутит? надо проверить с user-agent:)
 

RT V?

Новичок
данные беруца у яндекса:) как думаю каждый заметил, то яндекс отдаёт все нормально... проверка с user-agent завершилась неудачей:) хотя вряд ли бы яндекс стал роботам отдавать плохую выдачу
 

chisto_tolyan

Враг народа
попробуй тот же скрипт не на яндексе, а на чем от другом. нужно пытаться локализовать ошибку)
 

RT V?

Новичок
20 рефрешей на рамблере. всё ок!:)) значит яндекс суёт ненужные символы?:) я чёт сомневаюсь
 

chisto_tolyan

Враг народа
если на рамблере все ок, значит пхп тут вообще не причем. если сомневаешься попробуй на другие сайты, и напиши в супорт яндексу
 

IntenT

SkyDiver
может хватит гадать, да?
Покажи заголовки, которые шлешь в сокет
 

RT V?

Новичок
PHP:
$out  = "GET $url HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Accept-Language: ru\r\n";
$out .= "Connection: close\r\n\r\n";
-~{}~ 22.02.06 17:49:

и еще
PHP:
$host = "www.yandex.ru";
$url = "/yandsearch?&q=&ag=d&p=1&text=E2%E0%EA%E0%ED%F1%E8%E8+%E5%EA%E0%F2%E5%F0%E8%ED%E1%F3%F0%E3&numdoc=10";
 

RT V?

Новичок
tony2001
так, а что не так то? объясни пожалуйста причину

-~{}~ 22.02.06 18:00:

надо сделать Transfer-Encoding: chunked
Я всё правильно понял?
всё по прежнему...

-~{}~ 22.02.06 18:11:

смотри в какой строчке, после каких символов появляется лишний символ
кстати только что заметил, всё таки появляется почти в одном и том же месте на 1-5 символов влево и вправо, или отсутсвует совсем или где угодно:), но чаще так

-~{}~ 22.02.06 18:35:

временно устранил preg_replace'ом, но если кто знает чем помочь, пишите пожалуйста!
всем спасибо
 

McSimm

Новичок
RT V?
Вам дали всю информацию для решения вопроса.
Когда сервер возвращает chunked его ответ представляет собой серию блоков, каждый блок начинается с размера. Последний блок - нулевого размера.
Или при получении такого ответа нормально разбирайте блоки или попробуйте запросить HTTP/1.0 - не уверен, но возможно поможет.
 

RT V?

Новичок
McSimm
спасибо большое, я видимо не так понял пост tony2001:)
но вы всё хорошо объяснили, еще раз спасибо:)
 
Сверху