From 7edf623c5ddadb989db89dfd8ebd4d822605b8af Mon Sep 17 00:00:00 2001 From: Michael Wallner Date: Fri, 23 Mar 2012 13:43:02 +0000 Subject: [PATCH] add population of _POST and _FILES for non-POST requests; release 2.0.0dev9 --- package.xml | 5 +++-- php_http.h | 2 +- php_http_env.c | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) diff --git a/package.xml b/package.xml index 4546749..6aceacc 100644 --- a/package.xml +++ b/package.xml @@ -27,9 +27,9 @@ Extended HTTP support. Again. Keep in mind that it's got the major version 2, be mike@php.net yes - 2012-03-16 + 2012-03-23 - 2.0.0dev + 2.0.0dev9 2.0.0 @@ -38,6 +38,7 @@ Extended HTTP support. Again. Keep in mind that it's got the major version 2, be BSD, revised env.request.time = sapi_get_request_time(TSRMLS_C); + /* populate form data on non-POST requests */ + if (SG(request_info).request_method && strcasecmp(SG(request_info).request_method, "POST") && SG(request_info).content_type && *SG(request_info).content_type) { + uint ct_len = strlen(SG(request_info).content_type); + char *ct_str = estrndup(SG(request_info).content_type, ct_len); + php_http_params_opts_t opts; + HashTable params; + + php_http_params_opts_default_get(&opts); + opts.input.str = ct_str; + opts.input.len = ct_len; + + SG(request_info).content_type_dup = ct_str; + + ZEND_INIT_SYMTABLE(¶ms); + if (php_http_params_parse(¶ms, &opts TSRMLS_CC)) { + zval **zct; + char *key_str; + uint key_len; + ulong key_num; + + if (HASH_KEY_IS_STRING == zend_hash_get_current_key_ex(¶ms, &key_str, &key_len, &key_num, 0, NULL)) { + sapi_post_entry *post_entry = NULL; + + if (SUCCESS == zend_hash_find(&SG(known_post_content_types), key_str, key_len, (void *) &post_entry)) { + zval *files = PG(http_globals)[TRACK_VARS_FILES]; + + zend_is_auto_global(ZEND_STRL("_POST") TSRMLS_CC); + + if (post_entry) { + SG(request_info).post_entry = post_entry; + + if (post_entry->post_reader) { + post_entry->post_reader(TSRMLS_C); + } + } + + if (sapi_module.default_post_reader) { + sapi_module.default_post_reader(TSRMLS_C); + } + + sapi_handle_post(PG(http_globals)[TRACK_VARS_POST] TSRMLS_CC); + + /* + * the rfc1867 handler is an awkward buddy + */ + if (files != PG(http_globals)[TRACK_VARS_FILES] && PG(http_globals)[TRACK_VARS_FILES]) { + Z_ADDREF_P(PG(http_globals)[TRACK_VARS_FILES]); + zend_hash_update(&EG(symbol_table), "_FILES", sizeof("_FILES"), &PG(http_globals)[TRACK_VARS_FILES], sizeof(zval *), NULL); + if (files) { + zval_ptr_dtor(&files); + } + } + } + } + zend_hash_destroy(¶ms); + } + } + + STR_SET(SG(request_info).content_type_dup, NULL); + return SUCCESS; } -- 2.30.2