Edit report at https://bugs.php.net/bug.php?id=48725&edit=1
ID: 48725
Comment by: nastasi at alternativeoutput dot it
Reported by: slusarz at curecanti dot org
Summary: Support for flushing in zlib stream
Status: Open
Type: Bug
Package: Streams related
Operating System: Linux
PHP Version: 5.2.10
Block user comment: N
Private report: N
New Comment:
I had worked on the php source code and found a fix.
To understand what happens I had traced what happens during a
....
for ($i = 0 ; $i < 3 ; $i++) {
fwrite($s[0]);
fread($s[1]);
fflush($s[0]);
fread($s[1]);
}
loop and I found that the `deflate` function is never called with the
`Z_SYNC_FLUSH` flag set because no new data are present into the `backets_in`
brigade.
My fix is to manage the `PSFS_FLAG_FLUSH_INC` case `AND` no iterations are
performed on deflate function extending the
if (flags & PSFS_FLAG_FLUSH_CLOSE) {
managing `FLUSH_INC` too:
if (flags & PSFS_FLAG_FLUSH_CLOSE || (flags & PSFS_FLAG_FLUSH_INC &&
to_be_flushed)) {
All my work is performed on Debian squeeze 6.0.5, and PHP 5.3.3-7+squeeze14 but
I already check the current git version and it seems not changed for the
essetial parts.
Previous Comments:
------------------------------------------------------------------------
[2012-10-24 13:27:35] arnout dot boks at moxio dot com
Verified this with PHP 5.4.7 on Windows.
Another reproduce case:
-----------------------
<?php
$stream = fopen('data://text/plain;base64,' . base64_encode('Foo bar baz'),
'r');
stream_filter_append($stream, 'zlib.deflate', STREAM_FILTER_READ);
print bin2hex(stream_get_contents($stream));
Expected:
---------
73cbcf57484a2c02e22a00 // == bin2hex(gzdeflate('Foo bar baz'))
Actual:
-------
// (empty)
Variations tried:
-----------------
- Replacing the 'zlib.deflate'-filter by another stream filter ('string.rot13')
gives the correct output.
- Replacing the 'data://'-URL by a 'file://'- or 'http://'-URL pointing to the
same data gives the correct output.
- Replacing the 'data://'-URL by a 'php://memory' or 'php://temp' stream to
which the data has been written (and the stream rewinded) gives empty output
------------------------------------------------------------------------
[2012-05-20 01:45:27] lello-3 at hotmail dot com
Please fix this
------------------------------------------------------------------------
[2011-12-13 22:36:17] dtrebbien at gmail dot com
See also:
http://stackoverflow.com/questions/7508762/using-zlib-filter-with-a-socket-pair/
------------------------------------------------------------------------
[2009-10-23 12:25:10] [email protected]
It's related, not same. :)
------------------------------------------------------------------------
[2009-10-22 21:40:37] slusarz at curecanti dot org
I don't think this is related to bug #49816. Turning off zlib output
compression (by adding "ini_set('zlib.output_compression', 'Off');" to the top
of the test script)doesn't alter the results from the test script previously
reported.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=48725
--
Edit this bug report at https://bugs.php.net/bug.php?id=48725&edit=1