summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ext/standard/http_fopen_wrapper.c12
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;