X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=http_api.c;h=7825ebdd353ebd57aaf3098577d1bff821106e66;hb=76ef3c1710bd22c560f9459f00452050d72f44db;hp=27986373b2f328895cd22ecb7c5c933e0506b2b3;hpb=14819be2113881e1030d23c6a1a32e17083ab406;p=m6w6%2Fext-http diff --git a/http_api.c b/http_api.c index 2798637..7825ebd 100644 --- a/http_api.c +++ b/http_api.c @@ -6,7 +6,7 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2005, Michael Wallner | + | Copyright (c) 2004-2006, Michael Wallner | +--------------------------------------------------------------------+ */ @@ -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 @@ -209,9 +206,7 @@ void _http_log_ex(char *file, const char *ident, const char *message TSRMLS_DC) { time_t now; struct tm nowtm; - char datetime[128]; - - HTTP_CHECK_OPEN_BASEDIR(file, return); + char datetime[20] = {0}; time(&now); strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", php_localtime_r(&now, &nowtm)); @@ -250,7 +245,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)); } @@ -259,6 +254,7 @@ STATUS _http_exit_ex(int status, char *header, char *body, zend_bool send_header case 301: http_log(HTTP_G(log).redirect, "301-REDIRECT", header); break; case 302: http_log(HTTP_G(log).redirect, "302-REDIRECT", header); break; case 303: http_log(HTTP_G(log).redirect, "303-REDIRECT", header); break; + case 305: http_log(HTTP_G(log).redirect, "305-REDIRECT", header); break; case 307: http_log(HTTP_G(log).redirect, "307-REDIRECT", header); break; case 304: http_log(HTTP_G(log).cache, "304-CACHE", header); break; case 405: http_log(HTTP_G(log).allowed_methods, "405-ALLOWED", header); break; @@ -322,6 +318,33 @@ PHP_HTTP_API STATUS _http_get_request_body_ex(char **body, size_t *length, zend_ *body = (char *) (dup ? estrndup(SG(request_info).raw_post_data, *length) : SG(request_info).raw_post_data); return SUCCESS; } + + /* PHP only reads POST */ + if (sapi_module.read_post) { + char buf[4096]; + int len; + + while (0 < (len = sapi_module.read_post(buf, sizeof(buf) TSRMLS_CC))) { + *body = erealloc(*body, *length + len + 1); + memcpy(*body + *length, buf, len); + *length += len; + (*body)[*length] = '\0'; + } + + /* check for error */ + if (len >= 0) { + /* connect to sapi module so it'll be freed */ + if (!dup) { + SG(request_info).raw_post_data = *body; + SG(request_info).raw_post_data_length = *length; + } + return SUCCESS; + } else { + STR_FREE(*body); + *length = 0; + } + } + return FAILURE; } /* }}} */