diff --git a/ext/standard/exec.c b/ext/standard/exec.c index fd5076297bb..7313ce6e57c 100644 --- a/ext/standard/exec.c +++ b/ext/standard/exec.c @@ -976,7 +976,7 @@ PHP_FUNCTION(proc_open) fp = fdopen(descriptors[i].parentend, mode_string); #endif if (fp) { - stream = php_stream_fopen_from_pipe(fp, mode_string); + stream = php_stream_fopen_from_file(fp, mode_string); if (stream) { zval *retfp; diff --git a/main/streams.c b/main/streams.c index b8a67cfb4f1..abfdd52255f 100755 --- a/main/streams.c +++ b/main/streams.c @@ -1298,6 +1298,7 @@ PHPAPI php_stream *_php_stream_fopen_tmpfile(int dummy STREAMS_DC TSRMLS_DC) PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC TSRMLS_DC) { php_stdio_stream_data *self; + php_stream *stream; self = emalloc_rel_orig(sizeof(*self)); self->file = file; @@ -1314,7 +1315,13 @@ PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STRE } #endif - return php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode); + stream = php_stream_alloc_rel(&php_stream_stdio_ops, self, 0, mode); + + if (stream && self->is_pipe) { + stream->flags |= PHP_STREAM_FLAG_NO_SEEK; + } + + return stream; } PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC TSRMLS_DC)