| modification, are permitted provided that the conditions mentioned |
| in the accompanying LICENSE file are met. |
+--------------------------------------------------------------------+
- | Copyright (c) 2004-2005, Michael Wallner <mike@php.net> |
+ | Copyright (c) 2004-2006, Michael Wallner <mike@php.net> |
+--------------------------------------------------------------------+
*/
/* $Id$ */
-#ifdef HAVE_CONFIG_H
-# include "config.h"
-#endif
-
+#define HTTP_WANT_SAPI
#include "php_http.h"
-#include "SAPI.h"
#include "php_output.h"
#include "ext/standard/url.h"
# include "php_http_exception_object.h"
#endif
-ZEND_EXTERN_MODULE_GLOBALS(http);
-
PHP_MINIT_FUNCTION(http_support)
{
HTTP_LONG_CONSTANT("HTTP_SUPPORT", HTTP_SUPPORT);
{
time_t now;
struct tm nowtm;
- char datetime[128];
-
- HTTP_CHECK_OPEN_BASEDIR(file, return);
+ char datetime[20] = {0};
- time(&now);
+ now = HTTP_GET_REQUEST_TIME();
strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", php_localtime_r(&now, &nowtm));
#define HTTP_LOG_WRITE(file, type, msg) \
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;
{
*length = 0;
*body = NULL;
-
+
if (SG(request_info).raw_post_data) {
*length = SG(request_info).raw_post_data_length;
- *body = (char *) (dup ? estrndup(SG(request_info).raw_post_data, *length) : SG(request_info).raw_post_data);
+ *body = SG(request_info).raw_post_data;
+
+ if (dup) {
+ *body = estrndup(*body, *length);
+ }
+ return SUCCESS;
+ } else if (sapi_module.read_post && !HTTP_G(read_post_data)) {
+ char buf[4096];
+ int len;
+
+ HTTP_G(read_post_data) = 1;
+
+ 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) {
+ STR_FREE(*body);
+ *length = 0;
+ return FAILURE;
+ }
+
+ SG(request_info).raw_post_data = *body;
+ SG(request_info).raw_post_data_length = *length;
+
+ if (dup) {
+ *body = estrndup(*body, *length);
+ }
return SUCCESS;
}
+
return FAILURE;
}
/* }}} */
+/* {{{ php_stream *_http_get_request_body_stream(void) */
+PHP_HTTP_API php_stream *_http_get_request_body_stream(TSRMLS_D)
+{
+ php_stream *s = NULL;
+
+ if (SG(request_info).raw_post_data) {
+ s = php_stream_open_wrapper("php://input", "rb", 0, NULL);
+ } else if (sapi_module.read_post && !HTTP_G(read_post_data)) {
+ HTTP_G(read_post_data) = 1;
+
+ if ((s = php_stream_temp_new())) {
+ char buf[4096];
+ int len;
+
+ while (0 < (len = sapi_module.read_post(buf, sizeof(buf) TSRMLS_CC))) {
+ php_stream_write(s, buf, len);
+ }
+
+ if (len < 0) {
+ php_stream_close(s);
+ s = NULL;
+ } else {
+ php_stream_rewind(s);
+ }
+ }
+ }
+
+ return s;
+}
+/* }}} */
/*
* Local variables: