Использование фильтра zlib с парой сокетов

По какой-то причине фильтр 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, о которой я должен сообщить, или ошибка с моей стороны?

Этот вопрос является ответвлением от решения этого связанного вопроса .

6
задан Community 23 May 2017 в 09:59
поделиться