diff options
| -rw-r--r-- | ext/standard/http_fopen_wrapper.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 12482895b3..fd3ad826c4 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -122,8 +122,11 @@ php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, char *path, ch if (stream == NULL) goto out; - /* avoid buffering issues while reading header */ - chunk_size = php_stream_set_chunk_size(stream, 1); + /* Ordinarily we'd always reduce chunk_size to 1 to avoid filter problems. + However, since 4.3 filter support is extremely limited and will be completely rewritten in 5.0 + we'll accept the unexpected behavior of filtered http streams in favor of improved performance. */ + if (options & STREAM_WILL_CAST) + chunk_size = php_stream_set_chunk_size(stream, 1); php_stream_context_set(stream, context); @@ -399,8 +402,9 @@ out: if (stream) { stream->wrapperdata = response_header; php_stream_notify_progress_init(context, 0, file_size); - /* Restore original chunk size now that we're done with headers */ - php_stream_set_chunk_size(stream, chunk_size); + /* Restore original chunk size now that we're done with headers (if applicable) */ + if (options & STREAM_WILL_CAST) + php_stream_set_chunk_size(stream, chunk_size); /* as far as streams are concerned, we are now at the start of * the stream */ stream->position = 0; |
