#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
-#include "php.h"
+
+#include "php_http.h"
#include "SAPI.h"
+#include "php_output.h"
#include "ext/standard/url.h"
-#include "ext/standard/head.h"
-#include "php_http.h"
-#include "php_http_std_defs.h"
#include "php_http_api.h"
-#include "php_http_headers_api.h"
-#include "php_http_request_api.h"
#include "php_http_send_api.h"
#ifdef ZEND_ENGINE_2
-# include "zend_exceptions.h"
# include "php_http_exception_object.h"
#endif
-#include <ctype.h>
-
-#ifdef HTTP_HAVE_MAGIC
-# if defined(PHP_WIN32) && !defined(USE_MAGIC_DLL) && !defined(USE_MAGIC_STATIC)
-# define USE_MAGIC_STATIC
-# endif
-# include <magic.h>
-#endif
-
ZEND_EXTERN_MODULE_GLOBALS(http);
PHP_MINIT_FUNCTION(http_support)
#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
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));
}
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));
}
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;
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))) {
/* }}} */
-/* {{{ char *http_guess_content_type(char *magic_file, long magic_mode, void *data, size_t size, http_send_mode mode) */
-PHP_HTTP_API char *_http_guess_content_type(const char *magicfile, long magicmode, void *data_ptr, size_t data_len, http_send_mode data_mode TSRMLS_DC)
-{
- char *ct = NULL;
-
-#ifdef HTTP_HAVE_MAGIC
- /* magic_load() fails if MAGIC_MIME is set because it
- cowardly adds .mime to the file name */
- struct magic_set *magic = magic_open(magicmode &~ MAGIC_MIME);
-
- if (!magic) {
- http_error_ex(HE_WARNING, HTTP_E_INVALID_PARAM, "Invalid magic mode: %ld", magicmode);
- } else if (-1 == magic_load(magic, magicfile)) {
- http_error_ex(HE_WARNING, HTTP_E_RUNTIME, "Failed to load magic database '%s' (%s)", magicfile, magic_error(magic));
- } else {
- const char *ctype = NULL;
-
- magic_setflags(magic, magicmode);
-
- switch (data_mode)
- {
- case SEND_RSRC:
- {
- char *buffer;
- size_t b_len;
-
- b_len = php_stream_copy_to_mem(data_ptr, &buffer, 65536, 0);
- ctype = magic_buffer(magic, buffer, b_len);
- efree(buffer);
- }
- break;
-
- case SEND_DATA:
- ctype = magic_buffer(magic, data_ptr, data_len);
- break;
-
- default:
- ctype = magic_file(magic, data_ptr);
- break;
- }
-
- if (ctype) {
- ct = estrdup(ctype);
- } else {
- http_error_ex(HE_WARNING, HTTP_E_RUNTIME, "Failed to guess Content-Type: %s", magic_error(magic));
- }
- }
- if (magic) {
- magic_close(magic);
- }
-#else
- http_error(HE_WARNING, HTTP_E_RUNTIME, "Cannot guess Content-Type; libmagic not available");
-#endif
-
- return ct;
-}
-/* }}} */
/*
* Local variables:
* tab-width: 4