A memory usage improvement regarding receiving HTTP payloads with a potential reduction of 200-300%.
This change replaces the SAPI layer's (raw_)post_data entries with a temporary PHP stream.
If the request was a standard www-form-urlencoded or form-data POST, everything is just as it was before.
If the request had another request method or an unrecognized content type, the payload is available through the re-usable, just-in-time php://input stream.
Next 5.x, i.e. 5.6
Standard form POSTs and file uploads.
$HTTP_RAW_POST_DATA and always_populate_raw_post_data were removed.
BC can be restored with:
$GLOBALS["HTTP_RAW_POST_DATA"] = file_get_contents("php://input");
Extensions utilizing SG(request_info).(raw_)post_data(_len).
In case of mbstring, the fix was as simple and ineffective as:
@@ -376,7 +377,10 @@ SAPI_POST_HANDLER_FUNC(php_mb_post_handler) info.num_from_encodings = MBSTRG(http_input_list_size); info.from_language = MBSTRG(language); - detected = _php_mb_encoding_handler_ex(&info, arg, SG(request_info).post_data TSRMLS_CC); + php_stream_rewind(SG(request_info).request_body); + php_stream_copy_to_mem(SG(request_info).request_body, &post_data_str, PHP_STREAM_COPY_ALL, 0); + detected = _php_mb_encoding_handler_ex(&info, arg, post_data_str TSRMLS_CC); + STR_FREE(post_data_str);
The SAPI layer might be improved for SAPIs to provide their own PHP stream for POST data implementation, instead of soaking everything into the temp stream.
To see the changes already in master, do, more or less:
git diff 1c15d70^..e6084da
Always_populate_raw_post_data patch is available here: