- add ob_(deflate|inflate)handler
[m6w6/ext-http] / http_api.c
index 0bb6cf22a9b6ae65a7f089cf902f64a406d2d44d..07cb9f4dbced71aadc65962c5735266befb3c248 100644 (file)
@@ -21,7 +21,6 @@
 #include "SAPI.h"
 #include "php_output.h"
 #include "ext/standard/url.h"
-#include "ext/standard/head.h"
 
 #include "php_http_api.h"
 #include "php_http_send_api.h"
@@ -30,8 +29,6 @@
 #      include "php_http_exception_object.h"
 #endif
 
-ZEND_EXTERN_MODULE_GLOBALS(http);
-
 PHP_MINIT_FUNCTION(http_support)
 {
        HTTP_LONG_CONSTANT("HTTP_SUPPORT", HTTP_SUPPORT);
@@ -56,7 +53,7 @@ PHP_HTTP_API long _http_support(long feature)
 #ifdef HTTP_HAVE_MAGIC
        support |= HTTP_SUPPORT_MAGICMIME;
 #endif
-#if defined(HTTP_HAVE_ZLIB) || defined(HAVE_ZLIB)
+#ifdef HTTP_HAVE_ZLIB
        support |= HTTP_SUPPORT_ENCODINGS;
 #endif
 
@@ -211,6 +208,8 @@ void _http_log_ex(char *file, const char *ident, const char *message TSRMLS_DC)
        struct tm nowtm;
        char datetime[128];
        
+       HTTP_CHECK_OPEN_BASEDIR(file, return);
+       
        time(&now);
        strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", php_localtime_r(&now, &nowtm));
 
@@ -248,7 +247,7 @@ STATUS _http_exit_ex(int status, char *header, char *body, zend_bool send_header
        }
        
        php_end_ob_buffers(0 TSRMLS_CC);
-       if (php_header(TSRMLS_C) && body) {
+       if ((SUCCESS == sapi_send_headers(TSRMLS_C)) && body) {
                PHPWRITE(body, strlen(body));
        }
        
@@ -283,7 +282,7 @@ STATUS _http_check_method_ex(const char *method, const char *methods)
 
        if (    (found = strstr(methods, method)) &&
                        (found == method || !isalpha(found[-1])) &&
-                       (!isalpha(found[strlen(method) + 1]))) {
+                       (strlen(found) >= strlen(method) && !isalpha(found[strlen(method)]))) {
                return SUCCESS;
        }
        return FAILURE;
@@ -296,10 +295,10 @@ PHP_HTTP_API zval *_http_get_server_var_ex(const char *key, size_t key_size, zen
        zval **hsv;
        zval **var;
        
-       if (SUCCESS != zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &hsv)) {
+       if ((SUCCESS != zend_hash_find(&EG(symbol_table), "_SERVER", sizeof("_SERVER"), (void **) &hsv)) || (Z_TYPE_PP(hsv) != IS_ARRAY)) {
                return NULL;
        }
-       if (SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), (char *) key, key_size, (void **) &var)) {
+       if ((SUCCESS != zend_hash_find(Z_ARRVAL_PP(hsv), (char *) key, key_size, (void **) &var)) || (Z_TYPE_PP(var) != IS_STRING)) {
                return NULL;
        }
        if (check && !(Z_STRVAL_PP(var) && Z_STRLEN_PP(var))) {