По какой-то причине фильтр zlib.deflate
не работает с сгенерированными парами сокетов. Автор stream_socket_pair ()
. Все, что можно прочитать из второго сокета, - это двухбайтовый заголовок zlib, а все, что после него, равно NULL.
Пример:
6, 'window' => 15, 'memory' => 9);
stream_filter_append($in, 'zlib.deflate', STREAM_FILTER_WRITE, $params);
stream_set_blocking($in, 0);
stream_set_blocking($out, 0);
fwrite($in, 'Some big long string.');
$compressed = fread($out, 1024);
var_dump($compressed);
fwrite($in, 'Some big long string, take two.');
$compressed = fread($out, 1024);
var_dump($compressed);
fwrite($in, 'Some big long string - third time is the charm?');
$compressed = fread($out, 1024);
var_dump($compressed);
Вывод:
string(2) "x�"
string(0) ""
string(0) ""
Если я закомментирую вызов stream_filter_append ()
, запись / чтение потока будет работать правильно, данные будут полностью сброшены все три раза, и если я направлю отфильтрованный поток zlib в файл, а не через пару сокетов, сжатые данные будут записаны правильно. Таким образом, обе части правильно работают по отдельности, но не вместе. Это ошибка PHP, о которой я должен сообщить, или ошибка с моей стороны?
Этот вопрос является ответвлением от решения этого связанного вопроса .