Сокеты

Тема закрыта
242
.

Вот такая трабла у мну:
Есть быдлокод:

public function getData($ch)
{
$data = "";
while($buff = fgets($ch, 1024))
{
$data .= $buff;
if(feof($ch)) break;
}
return $data;
}

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

public function getData($ch)
{
$data = "";
while(!feof($ch))
{
$buff = fgets($ch, 1024);
$data .= $buff;
}
return $data;
}
Но результат тот же.
Как решить?

.

Решил траблу. Тему #.

.

Azq2, public function getData($ch)
{
$data = "";
if(strlen($ch) >= 1)
{
while($buff = fgets($ch, 1024))
{
$data .= $buff;
if(feof($ch))
break;

}

}
return $data;
}
пробуй)

.

~XeOn~, $ch - это указатель файла, а не строка. + читай каммент выше, проблема уже исправлена.

.
Блиносвёрт ?

Azq2, а чего не написано, как исправлено?

.

Azq2, Время поста смотри. Я писал когда твоего поста еще небыло.

.

Jane, Написал отдельные функции для приема данных с smtp и pop3 сервера.

public function getSmtpData($ch)
{
$data = "";
while($buff = fgets($ch, 515))
{
$data .= $buff;
if(feof($ch) || substr($buff, 3, 1) == " ") break;
}
return $data;
}

public function getPop3Data($ch)
{
$data = "";
while($buff = fgets($ch))
{
$data .= $buff;
if(feof($ch) || trim($buff) == ".") break;
}
return $data;
}
Всего: 7