From: Michael Wallner Date: Fri, 19 Aug 2005 07:50:54 +0000 (+0000) Subject: - use &EG(symbol_table)'s HTTP_SERVER_VARS instead of X-Git-Tag: RELEASE_0_12_0~31 X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=commitdiff_plain;h=e00740ccbf98e53bc1aa4aad31fa76560a32bfa4 - use &EG(symbol_table)'s HTTP_SERVER_VARS instead of PG(http_globals)[TRACK_VARS_SERVER] as the latter might only be filled with register_long_arrays=On --- diff --git a/http_api.c b/http_api.c index 8e683a1..de95a88 100644 --- a/http_api.c +++ b/http_api.c @@ -154,6 +154,7 @@ STATUS _http_parse_key_list(const char *list, HashTable *items, char separator, return SUCCESS; } +/* }}} */ /* {{{ void http_error(long, long, char*) */ void _http_error_ex(long type, long code, const char *format, ...) @@ -214,15 +215,19 @@ STATUS _http_check_method_ex(const char *method, const char *methods) /* {{{ zval *http_get_server_var_ex(char *, size_t) */ PHP_HTTP_API zval *_http_get_server_var_ex(const char *key, size_t key_size, zend_bool check TSRMLS_DC) { + zval **hsv; zval **var; - if (SUCCESS == zend_hash_find(HTTP_SERVER_VARS, (char *) key, key_size, (void **) &var)) { - if (check) { - return Z_STRVAL_PP(var) && Z_STRLEN_PP(var) ? *var : NULL; - } else { - return *var; - } + + if (SUCCESS != zend_hash_find(&EG(symbol_table), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), (void **) &hsv)) { + return NULL; + } + if (SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), (char *) key, key_size, (void **) &var)) { + return NULL; + } + if (check && !(Z_STRVAL_PP(var) && Z_STRLEN_PP(var))) { + return NULL; } - return NULL; + return *var; } /* }}} */ diff --git a/http_headers_api.c b/http_headers_api.c index 81a24e3..37e16cd 100644 --- a/http_headers_api.c +++ b/http_headers_api.c @@ -376,22 +376,24 @@ PHP_HTTP_API void _http_get_request_headers_ex(HashTable *headers, zend_bool pre { char *key = NULL; ulong idx = 0; - zval array; + zval array, **hsv; Z_ARRVAL(array) = headers; - FOREACH_HASH_KEY(HTTP_SERVER_VARS, key, idx) { - if (key && !strncmp(key, "HTTP_", 5)) { - zval **header; - - key += 5; - if (prettify) { - key = pretty_key(key, strlen(key), 1, 1); + if (SUCCESS == zend_hash_find(&EG(symbol_table), "HTTP_SERVER_VARS", sizeof("HTTP_SERVER_VARS"), (void **) &hsv)) { + FOREACH_KEY(*hsv, key, idx) { + if (key && !strncmp(key, "HTTP_", 5)) { + zval **header; + + key += 5; + if (prettify) { + key = pretty_key(key, strlen(key), 1, 1); + } + + zend_hash_get_current_data(Z_ARRVAL_PP(hsv), (void **) &header); + add_assoc_stringl(&array, key, Z_STRVAL_PP(header), Z_STRLEN_PP(header), 1); + key = NULL; } - - zend_hash_get_current_data(HTTP_SERVER_VARS, (void **) &header); - add_assoc_stringl(&array, key, Z_STRVAL_PP(header), Z_STRLEN_PP(header), 1); - key = NULL; } } } diff --git a/http_response_object.c b/http_response_object.c index f4528f8..c9e71a9 100644 --- a/http_response_object.c +++ b/http_response_object.c @@ -780,7 +780,7 @@ PHP_METHOD(HttpResponse, send) if (Z_LVAL_P(GET_STATIC_PROP(gzip))) { php_start_ob_buffer_named("ob_gzhandler", 0, 1 TSRMLS_CC); } else { - php_start_ob_buffer(NULL, 0, 0 TSRMLS_CC); + php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); } /* caching */ diff --git a/php_http_std_defs.h b/php_http_std_defs.h index fac59a3..1e117b9 100644 --- a/php_http_std_defs.h +++ b/php_http_std_defs.h @@ -105,9 +105,6 @@ typedef int STATUS; /* END */ -/* server vars shorthand */ -#define HTTP_SERVER_VARS Z_ARRVAL_P(PG(http_globals)[TRACK_VARS_SERVER]) - #define HTTP_PHP_INI_ENTRY(entry, default, scope, updater, global) \ STD_PHP_INI_ENTRY(entry, default, scope, updater, global, zend_http_globals, http_globals)