У меня есть следующий код PHP для записи в указатель файла $fp
, который был открыт с помощью fsockopen
:
syslog(LOG_INFO, "Write " . strlen($buf) . " bytes to socket:");
$bytes = 0;
while ($bytes < strlen($buf) && ($w = @fwrite($fp, substr($buf, $bytes))))
{
syslog(LOG_INFO, " - " . $w . " bytes written to socket");
$bytes += $w;
}
if ($bytes != strlen($buf))
{
syslog(LOG_INFO, "error while writing to socket");
exit();
}
Этот код работает нормально, если размер $buf
достаточно мал. Большой объем данных не может быть записан полностью. Я получаю следующий вывод:
Write 4900360 bytes to socket:
- 11096 bytes written to socket
error while writing to socket
кстати. возвращаемое значение fwrite
равно 0
, а не false
.
У кого-нибудь есть идея, в чем может быть проблема? Большое спасибо за ваши ответы
При удалении @ перед fwrite я получаю следующие уведомления:
Notice: fwrite(): send of 8192 bytes failed with errno=104 Connection reset by peer in /root/test.php on line 10
Notice: fwrite(): send of 8192 bytes failed with errno=32 Broken pipe in /root/test.php on line 10
Я только что понюхал поток TCP и выяснил, что я получаю
HTTP/1.1 413 Request Entity Too Large
Есть ли какое-нибудь решение этой проблемы? Я использую сервер lighttpd / 1.4.22