|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2009-10-09 12:50 UTC] cschneid at cschneid dot com
Description: ------------ The PHP streams for stdin, stdout and stderr are seekable which results in php_stream_flush() and seek being called on it. For some reason php_stream_flush() fails to actually write the data while still calling seek and resetting the stream position. Suggested solution: - Find out why php_stream_flush() fails and fix it (I don't know enough about it) - Mark (some? all?) stdio streams as PHP_STREAM_FLAG_NO_SEEK in sapi/cli/php_cli.c (see patch) - Mark stdio streams as PHP_STREAM_FLAG_NO_SEEK in ext/standard/php_fopen_wrapper.c Reproduce code: --------------- php -r 'echo "hello1\n"; posix_isatty(STDOUT); echo "hello2\n";' >out; cat out Expected result: ---------------- hello1 hello2 Actual result: -------------- hello2 PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Thu Oct 30 22:00:01 2025 UTC |
--- sapi/cli/php_cli.c (revision 289412) +++ sapi/cli/php_cli.c (working copy) @@ -565,6 +565,10 @@ s_err->flags |= PHP_STREAM_FLAG_NO_CLOSE; #endif + s_in->flags |= PHP_STREAM_FLAG_NO_SEEK; + s_out->flags |= PHP_STREAM_FLAG_NO_SEEK; + s_err->flags |= PHP_STREAM_FLAG_NO_SEEK; + s_in_process = s_in; php_stream_to_zval(s_in, zin);