У меня проблема с подключением к telnet-серверу с использованием PHP-сокетов. Я закончил класс telnet, но на моем другом сервере этот класс не работал из-за значения unread_bytes stream_get_meta_data. PHP изменил это в версии 5.4? Я не могу найти что насчет этого изменения.
Код, который я использую:
$buff = '';
while (!feof($this->socket)) {
$buff .= fread($this->socket, 1024);
$stream_meta_data = stream_get_meta_data($this->socket);
if ($stream_meta_data['unread_bytes'] <= 0)
break;
}
Кто-нибудь может мне помочь или сказать мне, что я могу изменить?
Вы не четко указали, что должен делать ваш фрагмент кода:
Но твой комментарий feof () не работает правильно предполагает, что вы после 2., так как feof()
проверки будет достаточно для 1 .; ср комментарий от Wez к «Не ошибка» unread_bytes всегда 0:
unread_bytes — это количество байтов, оставшихся на уровне буферизации PHP.
после последнего прочтения.
Если вы использовали все данные из буфера
при предыдущем чтении, unread_bytes будет оставаться на нуле до следующего чтения
кусок данных из сети.
Таким образом, unread_bytes не должно быть
используется, чтобы определить, ожидают ли больше данных; Вы должны использовать либо:feof () для определения конца файла.
Не забывай что ты
Здесь можно использовать неблокирующий режим.В PHP 4.3 появилась новая функция
называется stream_select (), который ведет себя как socket_select () из
расширение сокетов, но работает на всех файлах, возвращаемых fopen () и
fsockopen (). Вы можете использовать его, чтобы проверить, какие файлы готовы для
чтение / запись, а также указать время ожидания.
Итак, если вы хотите 2., вы можете использовать stream_select()
или же socket_select()
,
Других решений пока нет …