version 1.1, 2012/02/21 23:48:05
|
version 1.1.1.2, 2012/05/29 12:34:35
|
Line 82
|
Line 82
|
#include "zend_indent.h" |
#include "zend_indent.h" |
#include "zend_extensions.h" |
#include "zend_extensions.h" |
#include "zend_ini.h" |
#include "zend_ini.h" |
|
#include "zend_dtrace.h" |
|
|
#include "php_content_types.h" |
#include "php_content_types.h" |
#include "php_ticks.h" |
#include "php_ticks.h" |
Line 91
|
Line 92
|
|
|
#include "SAPI.h" |
#include "SAPI.h" |
#include "rfc1867.h" |
#include "rfc1867.h" |
#if SUHOSIN_PATCH |
|
#include "suhosin_globals.h" |
|
#endif |
|
|
|
#if HAVE_MMAP | #if HAVE_MMAP || defined(PHP_WIN32) |
# if HAVE_UNISTD_H |
# if HAVE_UNISTD_H |
# include <unistd.h> |
# include <unistd.h> |
# if defined(_SC_PAGESIZE) |
# if defined(_SC_PAGESIZE) |
Line 128 PHPAPI int core_globals_id;
|
Line 126 PHPAPI int core_globals_id;
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
#include "win32_internal_function_disabled.h" |
#include "win32_internal_function_disabled.h" |
|
|
static php_win32_disable_functions() { | static php_win32_disable_functions(TSRMLS_D) |
| { |
int i; |
int i; |
TSRMLS_FETCH(); |
|
|
|
if (EG(windows_version_info).dwMajorVersion < 5) { |
if (EG(windows_version_info).dwMajorVersion < 5) { |
for (i = 0; i < function_name_cnt_5; i++) { |
for (i = 0; i < function_name_cnt_5; i++) { |
Line 257 static void php_disable_classes(TSRMLS_D)
|
Line 255 static void php_disable_classes(TSRMLS_D)
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
|
/* {{{ php_binary_init |
|
*/ |
|
static void php_binary_init(TSRMLS_D) |
|
{ |
|
char *binary_location; |
|
#ifdef PHP_WIN32 |
|
binary_location = (char *)malloc(MAXPATHLEN); |
|
if (GetModuleFileName(0, binary_location, MAXPATHLEN) == 0) { |
|
free(binary_location); |
|
PG(php_binary) = NULL; |
|
} |
|
#else |
|
if (sapi_module.executable_location) { |
|
binary_location = (char *)malloc(MAXPATHLEN); |
|
if (!strchr(sapi_module.executable_location, '/')) { |
|
char *envpath, *path; |
|
int found = 0; |
|
|
|
if ((envpath = getenv("PATH")) != NULL) { |
|
char *search_dir, search_path[MAXPATHLEN]; |
|
char *last = NULL; |
|
|
|
path = estrdup(envpath); |
|
search_dir = php_strtok_r(path, ":", &last); |
|
|
|
while (search_dir) { |
|
snprintf(search_path, MAXPATHLEN, "%s/%s", search_dir, sapi_module.executable_location); |
|
if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK)) { |
|
found = 1; |
|
break; |
|
} |
|
search_dir = php_strtok_r(NULL, ":", &last); |
|
} |
|
efree(path); |
|
} |
|
if (!found) { |
|
free(binary_location); |
|
binary_location = NULL; |
|
} |
|
} else if (!VCWD_REALPATH(sapi_module.executable_location, binary_location) || VCWD_ACCESS(binary_location, X_OK)) { |
|
free(binary_location); |
|
binary_location = NULL; |
|
} |
|
} else { |
|
binary_location = NULL; |
|
} |
|
#endif |
|
PG(php_binary) = binary_location; |
|
} |
|
/* }}} */ |
|
|
/* {{{ PHP_INI_MH |
/* {{{ PHP_INI_MH |
*/ |
*/ |
static PHP_INI_MH(OnUpdateTimeout) |
static PHP_INI_MH(OnUpdateTimeout) |
Line 368 static PHP_INI_MH(OnUpdateErrorLog)
|
Line 417 static PHP_INI_MH(OnUpdateErrorLog)
|
{ |
{ |
/* Only do the safemode/open_basedir check at runtime */ |
/* Only do the safemode/open_basedir check at runtime */ |
if ((stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) && new_value && strcmp(new_value, "syslog")) { |
if ((stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) && new_value && strcmp(new_value, "syslog")) { |
if (PG(safe_mode) && (!php_checkuid(new_value, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { |
|
return FAILURE; |
|
} |
|
|
|
if (PG(open_basedir) && php_check_open_basedir(new_value TSRMLS_CC)) { |
if (PG(open_basedir) && php_check_open_basedir(new_value TSRMLS_CC)) { |
return FAILURE; |
return FAILURE; |
} |
} |
|
|
} |
} |
OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); |
OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); |
return SUCCESS; |
return SUCCESS; |
Line 388 static PHP_INI_MH(OnUpdateMailLog)
|
Line 432 static PHP_INI_MH(OnUpdateMailLog)
|
{ |
{ |
/* Only do the safemode/open_basedir check at runtime */ |
/* Only do the safemode/open_basedir check at runtime */ |
if ((stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) && new_value) { |
if ((stage == PHP_INI_STAGE_RUNTIME || stage == PHP_INI_STAGE_HTACCESS) && new_value) { |
if (PG(safe_mode) && (!php_checkuid(new_value, NULL, CHECKUID_CHECK_FILE_AND_DIR))) { |
|
return FAILURE; |
|
} |
|
|
|
if (PG(open_basedir) && php_check_open_basedir(new_value TSRMLS_CC)) { |
if (PG(open_basedir) && php_check_open_basedir(new_value TSRMLS_CC)) { |
return FAILURE; |
return FAILURE; |
} |
} |
|
|
} |
} |
OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); |
OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC); |
return SUCCESS; |
return SUCCESS; |
Line 417 static PHP_INI_MH(OnChangeMailForceExtra)
|
Line 456 static PHP_INI_MH(OnChangeMailForceExtra)
|
/* defined in browscap.c */ |
/* defined in browscap.c */ |
PHP_INI_MH(OnChangeBrowscap); |
PHP_INI_MH(OnChangeBrowscap); |
|
|
/* Need to convert to strings and make use of: | |
* PHP_SAFE_MODE | /* Need to be read from the environment (?): |
* | |
* Need to be read from the environment (?): | |
* PHP_AUTO_PREPEND_FILE |
* PHP_AUTO_PREPEND_FILE |
* PHP_AUTO_APPEND_FILE |
* PHP_AUTO_APPEND_FILE |
* PHP_DOCUMENT_ROOT |
* PHP_DOCUMENT_ROOT |
Line 428 PHP_INI_MH(OnChangeBrowscap);
|
Line 465 PHP_INI_MH(OnChangeBrowscap);
|
* PHP_INCLUDE_PATH |
* PHP_INCLUDE_PATH |
*/ |
*/ |
|
|
#ifndef PHP_SAFE_MODE_EXEC_DIR |
|
# define PHP_SAFE_MODE_EXEC_DIR "" |
|
#endif |
|
|
|
/* Windows and Netware use the internal mail */ |
/* Windows and Netware use the internal mail */ |
#if defined(PHP_WIN32) || defined(NETWARE) |
#if defined(PHP_WIN32) || defined(NETWARE) |
# define DEFAULT_SENDMAIL_PATH NULL |
# define DEFAULT_SENDMAIL_PATH NULL |
Line 444 PHP_INI_MH(OnChangeBrowscap);
|
Line 477 PHP_INI_MH(OnChangeBrowscap);
|
/* {{{ PHP_INI |
/* {{{ PHP_INI |
*/ |
*/ |
PHP_INI_BEGIN() |
PHP_INI_BEGIN() |
PHP_INI_ENTRY_EX("define_syslog_variables", "0", PHP_INI_ALL, NULL, php_ini_boolean_displayer_cb) |
|
PHP_INI_ENTRY_EX("highlight.bg", HL_BG_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
|
PHP_INI_ENTRY_EX("highlight.comment", HL_COMMENT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.comment", HL_COMMENT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.default", HL_DEFAULT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.default", HL_DEFAULT_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.html", HL_HTML_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.html", HL_HTML_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.keyword", HL_KEYWORD_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.keyword", HL_KEYWORD_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.string", HL_STRING_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
PHP_INI_ENTRY_EX("highlight.string", HL_STRING_COLOR, PHP_INI_ALL, NULL, php_ini_color_displayer_cb) |
|
|
STD_PHP_INI_BOOLEAN("allow_call_time_pass_reference", "1", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, allow_call_time_pass_reference, zend_compiler_globals, compiler_globals) |
|
STD_PHP_INI_BOOLEAN("asp_tags", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, asp_tags, zend_compiler_globals, compiler_globals) |
STD_PHP_INI_BOOLEAN("asp_tags", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, asp_tags, zend_compiler_globals, compiler_globals) |
STD_PHP_INI_ENTRY_EX("display_errors", "1", PHP_INI_ALL, OnUpdateDisplayErrors, display_errors, php_core_globals, core_globals, display_errors_mode) |
STD_PHP_INI_ENTRY_EX("display_errors", "1", PHP_INI_ALL, OnUpdateDisplayErrors, display_errors, php_core_globals, core_globals, display_errors_mode) |
STD_PHP_INI_BOOLEAN("display_startup_errors", "0", PHP_INI_ALL, OnUpdateBool, display_startup_errors, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("display_startup_errors", "0", PHP_INI_ALL, OnUpdateBool, display_startup_errors, php_core_globals, core_globals) |
Line 472 PHP_INI_BEGIN()
|
Line 502 PHP_INI_BEGIN()
|
STD_PHP_INI_BOOLEAN("ignore_repeated_source", "0", PHP_INI_ALL, OnUpdateBool, ignore_repeated_source, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("ignore_repeated_source", "0", PHP_INI_ALL, OnUpdateBool, ignore_repeated_source, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("report_memleaks", "1", PHP_INI_ALL, OnUpdateBool, report_memleaks, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("report_memleaks", "1", PHP_INI_ALL, OnUpdateBool, report_memleaks, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("report_zend_debug", "1", PHP_INI_ALL, OnUpdateBool, report_zend_debug, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("report_zend_debug", "1", PHP_INI_ALL, OnUpdateBool, report_zend_debug, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("magic_quotes_gpc", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, magic_quotes_gpc, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("magic_quotes_runtime", "0", PHP_INI_ALL, OnUpdateBool, magic_quotes_runtime, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("magic_quotes_sybase", "0", PHP_INI_ALL, OnUpdateBool, magic_quotes_sybase, php_core_globals, core_globals) |
|
STD_PHP_INI_ENTRY("output_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateLong, output_buffering, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("output_buffering", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateLong, output_buffering, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("output_handler", NULL, PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateString, output_handler, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("output_handler", NULL, PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateString, output_handler, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("register_argc_argv", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_argc_argv, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("register_argc_argv", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_argc_argv, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("register_globals", "0", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_globals, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("register_long_arrays", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, register_long_arrays, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("auto_globals_jit", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, auto_globals_jit, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("auto_globals_jit", "1", PHP_INI_PERDIR|PHP_INI_SYSTEM, OnUpdateBool, auto_globals_jit, php_core_globals, core_globals) |
#if PHP_SAFE_MODE |
|
STD_PHP_INI_BOOLEAN("safe_mode", "1", PHP_INI_SYSTEM, OnUpdateBool, safe_mode, php_core_globals, core_globals) |
|
#else |
|
STD_PHP_INI_BOOLEAN("safe_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, safe_mode, php_core_globals, core_globals) |
|
#endif |
|
STD_PHP_INI_ENTRY("safe_mode_include_dir", NULL, PHP_INI_SYSTEM, OnUpdateString, safe_mode_include_dir, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("safe_mode_gid", "0", PHP_INI_SYSTEM, OnUpdateBool, safe_mode_gid, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("short_open_tag", DEFAULT_SHORT_OPEN_TAG, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, short_tags, zend_compiler_globals, compiler_globals) |
STD_PHP_INI_BOOLEAN("short_open_tag", DEFAULT_SHORT_OPEN_TAG, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, short_tags, zend_compiler_globals, compiler_globals) |
STD_PHP_INI_BOOLEAN("sql.safe_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, sql_safe_mode, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("sql.safe_mode", "0", PHP_INI_SYSTEM, OnUpdateBool, sql_safe_mode, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("track_errors", "0", PHP_INI_ALL, OnUpdateBool, track_errors, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("track_errors", "0", PHP_INI_ALL, OnUpdateBool, track_errors, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("y2k_compliance", "1", PHP_INI_ALL, OnUpdateBool, y2k_compliance, php_core_globals, core_globals) |
|
|
|
STD_PHP_INI_ENTRY("unserialize_callback_func", NULL, PHP_INI_ALL, OnUpdateString, unserialize_callback_func, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("unserialize_callback_func", NULL, PHP_INI_ALL, OnUpdateString, unserialize_callback_func, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("serialize_precision", "17", PHP_INI_ALL, OnUpdateLongGEZero, serialize_precision, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("serialize_precision", "17", PHP_INI_ALL, OnUpdateLongGEZero, serialize_precision, php_core_globals, core_globals) |
Line 507 PHP_INI_BEGIN()
|
Line 524 PHP_INI_BEGIN()
|
STD_PHP_INI_ENTRY("extension_dir", PHP_EXTENSION_DIR, PHP_INI_SYSTEM, OnUpdateStringUnempty, extension_dir, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("extension_dir", PHP_EXTENSION_DIR, PHP_INI_SYSTEM, OnUpdateStringUnempty, extension_dir, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("include_path", PHP_INCLUDE_PATH, PHP_INI_ALL, OnUpdateStringUnempty, include_path, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("include_path", PHP_INCLUDE_PATH, PHP_INI_ALL, OnUpdateStringUnempty, include_path, php_core_globals, core_globals) |
PHP_INI_ENTRY("max_execution_time", "30", PHP_INI_ALL, OnUpdateTimeout) |
PHP_INI_ENTRY("max_execution_time", "30", PHP_INI_ALL, OnUpdateTimeout) |
PHP_INI_ENTRY("open_basedir", NULL, PHP_INI_ALL, OnUpdateBaseDir) | STD_PHP_INI_ENTRY("open_basedir", NULL, PHP_INI_ALL, OnUpdateBaseDir, open_basedir, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("safe_mode_exec_dir", PHP_SAFE_MODE_EXEC_DIR, PHP_INI_SYSTEM, OnUpdateString, safe_mode_exec_dir, php_core_globals, core_globals) | |
|
|
STD_PHP_INI_BOOLEAN("file_uploads", "1", PHP_INI_SYSTEM, OnUpdateBool, file_uploads, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("file_uploads", "1", PHP_INI_SYSTEM, OnUpdateBool, file_uploads, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("upload_max_filesize", "2M", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLong, upload_max_filesize, php_core_globals, core_globals) |
STD_PHP_INI_ENTRY("upload_max_filesize", "2M", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateLong, upload_max_filesize, php_core_globals, core_globals) |
Line 536 PHP_INI_BEGIN()
|
Line 552 PHP_INI_BEGIN()
|
PHP_INI_ENTRY("mail.force_extra_parameters",NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnChangeMailForceExtra) |
PHP_INI_ENTRY("mail.force_extra_parameters",NULL, PHP_INI_SYSTEM|PHP_INI_PERDIR, OnChangeMailForceExtra) |
PHP_INI_ENTRY("disable_functions", "", PHP_INI_SYSTEM, NULL) |
PHP_INI_ENTRY("disable_functions", "", PHP_INI_SYSTEM, NULL) |
PHP_INI_ENTRY("disable_classes", "", PHP_INI_SYSTEM, NULL) |
PHP_INI_ENTRY("disable_classes", "", PHP_INI_SYSTEM, NULL) |
PHP_INI_ENTRY("max_file_uploads", "20", PHP_INI_SYSTEM, NULL) | PHP_INI_ENTRY("max_file_uploads", "20", PHP_INI_SYSTEM|PHP_INI_PERDIR, NULL) |
|
|
STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_url_fopen, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("allow_url_fopen", "1", PHP_INI_SYSTEM, OnUpdateBool, allow_url_fopen, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("allow_url_include", "0", PHP_INI_SYSTEM, OnUpdateBool, allow_url_include, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("allow_url_include", "0", PHP_INI_SYSTEM, OnUpdateBool, allow_url_include, php_core_globals, core_globals) |
|
STD_PHP_INI_BOOLEAN("enable_post_data_reading", "1", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, enable_post_data_reading, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("always_populate_raw_post_data", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, always_populate_raw_post_data, php_core_globals, core_globals) |
STD_PHP_INI_BOOLEAN("always_populate_raw_post_data", "0", PHP_INI_SYSTEM|PHP_INI_PERDIR, OnUpdateBool, always_populate_raw_post_data, php_core_globals, core_globals) |
|
|
STD_PHP_INI_ENTRY("realpath_cache_size", "16K", PHP_INI_SYSTEM, OnUpdateLong, realpath_cache_size_limit, virtual_cwd_globals, cwd_globals) |
STD_PHP_INI_ENTRY("realpath_cache_size", "16K", PHP_INI_SYSTEM, OnUpdateLong, realpath_cache_size_limit, virtual_cwd_globals, cwd_globals) |
Line 574 static int php_during_module_shutdown(void)
|
Line 591 static int php_during_module_shutdown(void)
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
|
/* {{{ php_get_module_initialized |
|
*/ |
|
PHPAPI int php_get_module_initialized(void) |
|
{ |
|
return module_initialized; |
|
} |
|
|
/* {{{ php_log_err |
/* {{{ php_log_err |
*/ |
*/ |
PHPAPI void php_log_err(char *log_message TSRMLS_DC) |
PHPAPI void php_log_err(char *log_message TSRMLS_DC) |
Line 608 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
|
Line 632 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
php_flock(fd, 2); |
php_flock(fd, 2); |
#endif |
#endif |
write(fd, tmp, len); | php_ignore_value(write(fd, tmp, len)); |
efree(tmp); |
efree(tmp); |
efree(error_time_str); |
efree(error_time_str); |
close(fd); |
close(fd); |
Line 620 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
|
Line 644 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
|
/* Otherwise fall back to the default logging location, if we have one */ |
/* Otherwise fall back to the default logging location, if we have one */ |
|
|
if (sapi_module.log_message) { |
if (sapi_module.log_message) { |
sapi_module.log_message(log_message); | sapi_module.log_message(log_message TSRMLS_CC); |
} |
} |
PG(in_error_log) = 0; |
PG(in_error_log) = 0; |
} |
} |
Line 666 PHPAPI void php_verror(const char *docref, const char
|
Line 690 PHPAPI void php_verror(const char *docref, const char
|
char *docref_target = "", *docref_root = ""; |
char *docref_target = "", *docref_root = ""; |
char *p; |
char *p; |
int buffer_len = 0; |
int buffer_len = 0; |
char *space = ""; | const char *space = ""; |
char *class_name = ""; | const char *class_name = ""; |
char *function; | const char *function; |
int origin_len; |
int origin_len; |
char *origin; |
char *origin; |
char *message; |
char *message; |
Line 676 PHPAPI void php_verror(const char *docref, const char
|
Line 700 PHPAPI void php_verror(const char *docref, const char
|
|
|
/* get error text into buffer and escape for html if necessary */ |
/* get error text into buffer and escape for html if necessary */ |
buffer_len = vspprintf(&buffer, 0, format, args); |
buffer_len = vspprintf(&buffer, 0, format, args); |
|
|
if (PG(html_errors)) { |
if (PG(html_errors)) { |
int len; | size_t len; |
char *replace = php_escape_html_entities(buffer, buffer_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC); |
char *replace = php_escape_html_entities(buffer, buffer_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC); |
efree(buffer); |
efree(buffer); |
buffer = replace; |
buffer = replace; |
Line 693 PHPAPI void php_verror(const char *docref, const char
|
Line 718 PHPAPI void php_verror(const char *docref, const char
|
EG(current_execute_data)->opline && |
EG(current_execute_data)->opline && |
EG(current_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL |
EG(current_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL |
) { |
) { |
switch (EG(current_execute_data)->opline->op2.u.constant.value.lval) { | switch (EG(current_execute_data)->opline->extended_value) { |
case ZEND_EVAL: |
case ZEND_EVAL: |
function = "eval"; |
function = "eval"; |
is_function = 1; |
is_function = 1; |
Line 735 PHPAPI void php_verror(const char *docref, const char
|
Line 760 PHPAPI void php_verror(const char *docref, const char
|
} |
} |
|
|
if (PG(html_errors)) { |
if (PG(html_errors)) { |
int len; | size_t len; |
char *replace = php_escape_html_entities(origin, origin_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC); |
char *replace = php_escape_html_entities(origin, origin_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC); |
efree(origin); |
efree(origin); |
origin = replace; |
origin = replace; |
Line 762 PHPAPI void php_verror(const char *docref, const char
|
Line 787 PHPAPI void php_verror(const char *docref, const char
|
} |
} |
|
|
/* we have a docref for a function AND |
/* we have a docref for a function AND |
* - we show erroes in html mode OR | * - we show errors in html mode AND |
* - the user wants to see the links anyway | * - the user wants to see the links |
*/ |
*/ |
if (docref && is_function && (PG(html_errors) || strlen(PG(docref_root)))) { | if (docref && is_function && PG(html_errors) && strlen(PG(docref_root))) { |
if (strncmp(docref, "http://", 7)) { |
if (strncmp(docref, "http://", 7)) { |
/* We don't have 'http://' so we use docref_root */ |
/* We don't have 'http://' so we use docref_root */ |
|
|
Line 927 static void php_error_cb(int type, const char *error_f
|
Line 952 static void php_error_cb(int type, const char *error_f
|
|
|
/* store the error if it has changed */ |
/* store the error if it has changed */ |
if (display) { |
if (display) { |
|
#ifdef ZEND_SIGNALS |
|
HANDLE_BLOCK_INTERRUPTIONS(); |
|
#endif |
if (PG(last_error_message)) { |
if (PG(last_error_message)) { |
free(PG(last_error_message)); |
free(PG(last_error_message)); |
PG(last_error_message) = NULL; |
PG(last_error_message) = NULL; |
Line 935 static void php_error_cb(int type, const char *error_f
|
Line 963 static void php_error_cb(int type, const char *error_f
|
free(PG(last_error_file)); |
free(PG(last_error_file)); |
PG(last_error_file) = NULL; |
PG(last_error_file) = NULL; |
} |
} |
|
#ifdef ZEND_SIGNALS |
|
HANDLE_UNBLOCK_INTERRUPTIONS(); |
|
#endif |
if (!error_filename) { |
if (!error_filename) { |
error_filename = "Unknown"; |
error_filename = "Unknown"; |
} |
} |
Line 1027 static void php_error_cb(int type, const char *error_f
|
Line 1058 static void php_error_cb(int type, const char *error_f
|
efree(log_buffer); |
efree(log_buffer); |
} |
} |
|
|
if (PG(display_errors) | if (PG(display_errors) && ((module_initialized && !PG(during_request_startup)) || (PG(display_startup_errors)))) { |
&& ((module_initialized && !PG(during_request_startup)) | |
|| (PG(display_startup_errors) | |
&& (OG(php_body_write)==php_default_output_func || OG(php_body_write)==php_ub_body_write_no_header || OG(php_body_write)==php_ub_body_write) | |
) | |
) | |
) { | |
| |
if (PG(xmlrpc_errors)) { |
if (PG(xmlrpc_errors)) { |
php_printf("<?xml version=\"1.0\"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>%ld</int></value></member><member><name>faultString</name><value><string>%s:%s in %s on line %d</string></value></member></struct></value></fault></methodResponse>", PG(xmlrpc_error_number), error_type_str, buffer, error_filename, error_lineno); |
php_printf("<?xml version=\"1.0\"?><methodResponse><fault><value><struct><member><name>faultCode</name><value><int>%ld</int></value></member><member><name>faultString</name><value><string>%s:%s in %s on line %d</string></value></member></struct></value></fault></methodResponse>", PG(xmlrpc_error_number), error_type_str, buffer, error_filename, error_lineno); |
} else { |
} else { |
Line 1042 static void php_error_cb(int type, const char *error_f
|
Line 1066 static void php_error_cb(int type, const char *error_f
|
char *append_string = INI_STR("error_append_string"); |
char *append_string = INI_STR("error_append_string"); |
|
|
if (PG(html_errors)) { |
if (PG(html_errors)) { |
if (type == E_ERROR) { | if (type == E_ERROR || type == E_PARSE) { |
int len; | size_t len; |
char *buf = php_escape_html_entities(buffer, buffer_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC); |
char *buf = php_escape_html_entities(buffer, buffer_len, &len, 0, ENT_COMPAT, NULL TSRMLS_CC); |
php_printf("%s<br />\n<b>%s</b>: %s in <b>%s</b> on line <b>%d</b><br />\n%s", STR_PRINT(prepend_string), error_type_str, buf, error_filename, error_lineno, STR_PRINT(append_string)); |
php_printf("%s<br />\n<b>%s</b>: %s in <b>%s</b> on line <b>%d</b><br />\n%s", STR_PRINT(prepend_string), error_type_str, buf, error_filename, error_lineno, STR_PRINT(append_string)); |
efree(buf); |
efree(buf); |
Line 1109 static void php_error_cb(int type, const char *error_f
|
Line 1133 static void php_error_cb(int type, const char *error_f
|
sapi_header_line ctr = {0}; |
sapi_header_line ctr = {0}; |
|
|
ctr.line = "HTTP/1.0 500 Internal Server Error"; |
ctr.line = "HTTP/1.0 500 Internal Server Error"; |
ctr.line_len = strlen(ctr.line); | ctr.line_len = sizeof("HTTP/1.0 500 Internal Server Error") - 1; |
sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); |
sapi_header_op(SAPI_HEADER_REPLACE, &ctr TSRMLS_CC); |
} |
} |
/* the parser would return 1 (failure), we can bail out nicely */ |
/* the parser would return 1 (failure), we can bail out nicely */ |
if (type != E_PARSE) { | if (type == E_PARSE) { |
| CG(parse_error) = 0; |
| } else { |
/* restore memory limit */ |
/* restore memory limit */ |
zend_set_memory_limit(PG(memory_limit)); |
zend_set_memory_limit(PG(memory_limit)); |
efree(buffer); |
efree(buffer); |
Line 1147 static void php_error_cb(int type, const char *error_f
|
Line 1173 static void php_error_cb(int type, const char *error_f
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
|
/* {{{ php_get_current_user |
|
*/ |
|
PHPAPI char *php_get_current_user(TSRMLS_D) |
|
{ |
|
struct stat *pstat; |
|
|
|
if (SG(request_info).current_user) { |
|
return SG(request_info).current_user; |
|
} |
|
|
|
/* FIXME: I need to have this somehow handled if |
|
USE_SAPI is defined, because cgi will also be |
|
interfaced in USE_SAPI */ |
|
|
|
pstat = sapi_get_stat(TSRMLS_C); |
|
|
|
if (!pstat) { |
|
return ""; |
|
} else { |
|
#ifdef PHP_WIN32 |
|
char name[256]; |
|
DWORD len = sizeof(name)-1; |
|
|
|
if (!GetUserName(name, &len)) { |
|
return ""; |
|
} |
|
name[len] = '\0'; |
|
SG(request_info).current_user_length = len; |
|
SG(request_info).current_user = estrndup(name, len); |
|
return SG(request_info).current_user; |
|
#else |
|
struct passwd *pwd; |
|
#if defined(ZTS) && defined(HAVE_GETPWUID_R) && defined(_SC_GETPW_R_SIZE_MAX) |
|
struct passwd _pw; |
|
struct passwd *retpwptr = NULL; |
|
int pwbuflen = sysconf(_SC_GETPW_R_SIZE_MAX); |
|
char *pwbuf; |
|
|
|
if (pwbuflen < 1) { |
|
return ""; |
|
} |
|
pwbuf = emalloc(pwbuflen); |
|
if (getpwuid_r(pstat->st_uid, &_pw, pwbuf, pwbuflen, &retpwptr) != 0) { |
|
efree(pwbuf); |
|
return ""; |
|
} |
|
pwd = &_pw; |
|
#else |
|
if ((pwd=getpwuid(pstat->st_uid))==NULL) { |
|
return ""; |
|
} |
|
#endif |
|
SG(request_info).current_user_length = strlen(pwd->pw_name); |
|
SG(request_info).current_user = estrndup(pwd->pw_name, SG(request_info).current_user_length); |
|
#if defined(ZTS) && defined(HAVE_GETPWUID_R) && defined(_SC_GETPW_R_SIZE_MAX) |
|
efree(pwbuf); |
|
#endif |
|
return SG(request_info).current_user; |
|
#endif |
|
} |
|
} |
|
/* }}} */ |
|
|
/* {{{ proto bool set_time_limit(int seconds) |
/* {{{ proto bool set_time_limit(int seconds) |
Sets the maximum time a script can run */ |
Sets the maximum time a script can run */ |
PHP_FUNCTION(set_time_limit) |
PHP_FUNCTION(set_time_limit) |
Line 1155 PHP_FUNCTION(set_time_limit)
|
Line 1244 PHP_FUNCTION(set_time_limit)
|
char *new_timeout_str; |
char *new_timeout_str; |
int new_timeout_strlen; |
int new_timeout_strlen; |
|
|
if (PG(safe_mode)) { |
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot set time limit in safe mode"); |
|
RETURN_FALSE; |
|
} |
|
|
|
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_timeout) == FAILURE) { |
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &new_timeout) == FAILURE) { |
return; |
return; |
} |
} |
Line 1179 PHP_FUNCTION(set_time_limit)
|
Line 1263 PHP_FUNCTION(set_time_limit)
|
*/ |
*/ |
static FILE *php_fopen_wrapper_for_zend(const char *filename, char **opened_path TSRMLS_DC) |
static FILE *php_fopen_wrapper_for_zend(const char *filename, char **opened_path TSRMLS_DC) |
{ |
{ |
return php_stream_open_wrapper_as_file((char *)filename, "rb", ENFORCE_SAFE_MODE|USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path); | return php_stream_open_wrapper_as_file((char *)filename, "rb", USE_PATH|IGNORE_URL_WIN|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE, opened_path); |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 1208 static size_t php_zend_stream_fsizer(void *handle TSRM
|
Line 1292 static size_t php_zend_stream_fsizer(void *handle TSRM
|
|
|
static int php_stream_open_for_zend(const char *filename, zend_file_handle *handle TSRMLS_DC) /* {{{ */ |
static int php_stream_open_for_zend(const char *filename, zend_file_handle *handle TSRMLS_DC) /* {{{ */ |
{ |
{ |
return php_stream_open_for_zend_ex(filename, handle, ENFORCE_SAFE_MODE|USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC); | return php_stream_open_for_zend_ex(filename, handle, USE_PATH|REPORT_ERRORS|STREAM_OPEN_FOR_INCLUDE TSRMLS_CC); |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 1219 PHPAPI int php_stream_open_for_zend_ex(const char *fil
|
Line 1303 PHPAPI int php_stream_open_for_zend_ex(const char *fil
|
php_stream *stream = php_stream_open_wrapper((char *)filename, "rb", mode, &handle->opened_path); |
php_stream *stream = php_stream_open_wrapper((char *)filename, "rb", mode, &handle->opened_path); |
|
|
if (stream) { |
if (stream) { |
#if HAVE_MMAP | #if HAVE_MMAP || defined(PHP_WIN32) |
size_t page_size = REAL_PAGE_SIZE; |
size_t page_size = REAL_PAGE_SIZE; |
#endif |
#endif |
|
|
Line 1233 PHPAPI int php_stream_open_for_zend_ex(const char *fil
|
Line 1317 PHPAPI int php_stream_open_for_zend_ex(const char *fil
|
memset(&handle->handle.stream.mmap, 0, sizeof(handle->handle.stream.mmap)); |
memset(&handle->handle.stream.mmap, 0, sizeof(handle->handle.stream.mmap)); |
len = php_zend_stream_fsizer(stream TSRMLS_CC); |
len = php_zend_stream_fsizer(stream TSRMLS_CC); |
if (len != 0 |
if (len != 0 |
#if HAVE_MMAP | #if HAVE_MMAP || defined(PHP_WIN32) |
&& ((len - 1) % page_size) <= page_size - ZEND_MMAP_AHEAD |
&& ((len - 1) % page_size) <= page_size - ZEND_MMAP_AHEAD |
#endif |
#endif |
&& php_stream_mmap_possible(stream) |
&& php_stream_mmap_possible(stream) |
Line 1278 static int php_get_configuration_directive_for_zend(co
|
Line 1362 static int php_get_configuration_directive_for_zend(co
|
|
|
/* {{{ php_message_handler_for_zend |
/* {{{ php_message_handler_for_zend |
*/ |
*/ |
static void php_message_handler_for_zend(long message, void *data TSRMLS_DC) | static void php_message_handler_for_zend(long message, const void *data TSRMLS_DC) |
{ |
{ |
switch (message) { |
switch (message) { |
case ZMSG_FAILED_INCLUDE_FOPEN: |
case ZMSG_FAILED_INCLUDE_FOPEN: |
Line 1372 void php_on_timeout(int seconds TSRMLS_DC)
|
Line 1456 void php_on_timeout(int seconds TSRMLS_DC)
|
*/ |
*/ |
static void sigchld_handler(int apar) |
static void sigchld_handler(int apar) |
{ |
{ |
|
int errno_save = errno; |
|
|
while (waitpid(-1, NULL, WNOHANG) > 0); |
while (waitpid(-1, NULL, WNOHANG) > 0); |
signal(SIGCHLD, sigchld_handler); |
signal(SIGCHLD, sigchld_handler); |
|
|
|
errno = errno_save; |
} |
} |
/* }}} */ |
/* }}} */ |
#endif |
#endif |
Line 1415 int php_request_startup(TSRMLS_D)
|
Line 1503 int php_request_startup(TSRMLS_D)
|
{ |
{ |
int retval = SUCCESS; |
int retval = SUCCESS; |
|
|
|
#ifdef HAVE_DTRACE |
|
DTRACE_REQUEST_STARTUP(SAFE_FILENAME(SG(request_info).path_translated), SAFE_FILENAME(SG(request_info).request_uri), SAFE_FILENAME(SG(request_info).request_method)); |
|
#endif /* HAVE_DTRACE */ |
|
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
PG(com_initialized) = 0; |
PG(com_initialized) = 0; |
#endif |
#endif |
Line 1438 int php_request_startup(TSRMLS_D)
|
Line 1530 int php_request_startup(TSRMLS_D)
|
zend_activate(TSRMLS_C); |
zend_activate(TSRMLS_C); |
sapi_activate(TSRMLS_C); |
sapi_activate(TSRMLS_C); |
|
|
|
#ifdef ZEND_SIGNALS |
|
zend_signal_activate(TSRMLS_C); |
|
#endif |
|
|
if (PG(max_input_time) == -1) { |
if (PG(max_input_time) == -1) { |
zend_set_timeout(EG(timeout_seconds), 1); |
zend_set_timeout(EG(timeout_seconds), 1); |
} else { |
} else { |
zend_set_timeout(PG(max_input_time), 1); |
zend_set_timeout(PG(max_input_time), 1); |
} |
} |
|
|
/* Disable realpath cache if safe_mode or open_basedir are set */ | /* Disable realpath cache if an open_basedir is set */ |
if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) { | if (PG(open_basedir) && *PG(open_basedir)) { |
CWDG(realpath_cache_size_limit) = 0; |
CWDG(realpath_cache_size_limit) = 0; |
} |
} |
|
|
Line 1454 int php_request_startup(TSRMLS_D)
|
Line 1550 int php_request_startup(TSRMLS_D)
|
} |
} |
|
|
if (PG(output_handler) && PG(output_handler)[0]) { |
if (PG(output_handler) && PG(output_handler)[0]) { |
php_start_ob_buffer_named(PG(output_handler), 0, 1 TSRMLS_CC); | zval *oh; |
| |
| MAKE_STD_ZVAL(oh); |
| ZVAL_STRING(oh, PG(output_handler), 1); |
| php_output_start_user(oh, 0, PHP_OUTPUT_HANDLER_STDFLAGS TSRMLS_CC); |
| zval_ptr_dtor(&oh); |
} else if (PG(output_buffering)) { |
} else if (PG(output_buffering)) { |
if (PG(output_buffering)>1) { | php_output_start_user(NULL, PG(output_buffering) > 1 ? PG(output_buffering) : 0, PHP_OUTPUT_HANDLER_STDFLAGS TSRMLS_CC); |
php_start_ob_buffer(NULL, PG(output_buffering), 1 TSRMLS_CC); | |
} else { | |
php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC); | |
} | |
} else if (PG(implicit_flush)) { |
} else if (PG(implicit_flush)) { |
php_start_implicit_flush(TSRMLS_C); | php_output_set_implicit_flush(1 TSRMLS_CC); |
} |
} |
|
|
/* We turn this off in php_execute_script() */ |
/* We turn this off in php_execute_script() */ |
Line 1498 int php_request_startup(TSRMLS_D)
|
Line 1595 int php_request_startup(TSRMLS_D)
|
|
|
zend_try { |
zend_try { |
PG(during_request_startup) = 1; |
PG(during_request_startup) = 1; |
php_output_activate(TSRMLS_C); |
|
if (PG(expose_php)) { |
if (PG(expose_php)) { |
sapi_add_header(SAPI_PHP_VERSION_HEADER, sizeof(SAPI_PHP_VERSION_HEADER)-1, 1); |
sapi_add_header(SAPI_PHP_VERSION_HEADER, sizeof(SAPI_PHP_VERSION_HEADER)-1, 1); |
} |
} |
Line 1542 void php_request_shutdown_for_exec(void *dummy)
|
Line 1638 void php_request_shutdown_for_exec(void *dummy)
|
/* used to close fd's in the 3..255 range here, but it's problematic |
/* used to close fd's in the 3..255 range here, but it's problematic |
*/ |
*/ |
shutdown_memory_manager(1, 1 TSRMLS_CC); |
shutdown_memory_manager(1, 1 TSRMLS_CC); |
|
zend_interned_strings_restore(TSRMLS_C); |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 1561 void php_request_shutdown_for_hook(void *dummy)
|
Line 1658 void php_request_shutdown_for_hook(void *dummy)
|
} |
} |
|
|
zend_try { |
zend_try { |
|
zend_unset_timeout(TSRMLS_C); |
|
} zend_end_try(); |
|
|
|
zend_try { |
int i; |
int i; |
|
|
for (i = 0; i < NUM_TRACK_VARS; i++) { |
for (i = 0; i < NUM_TRACK_VARS; i++) { |
Line 1584 void php_request_shutdown_for_hook(void *dummy)
|
Line 1685 void php_request_shutdown_for_hook(void *dummy)
|
shutdown_memory_manager(CG(unclean_shutdown), 0 TSRMLS_CC); |
shutdown_memory_manager(CG(unclean_shutdown), 0 TSRMLS_CC); |
} zend_end_try(); |
} zend_end_try(); |
|
|
|
zend_interned_strings_restore(TSRMLS_C); |
|
|
|
#ifdef ZEND_SIGNALS |
zend_try { |
zend_try { |
zend_unset_timeout(TSRMLS_C); | zend_signal_deactivate(TSRMLS_C); |
} zend_end_try(); |
} zend_end_try(); |
|
#endif |
} |
} |
|
|
/* }}} */ |
/* }}} */ |
Line 1621 void php_request_shutdown(void *dummy)
|
Line 1726 void php_request_shutdown(void *dummy)
|
/* 3. Flush all output buffers */ |
/* 3. Flush all output buffers */ |
zend_try { |
zend_try { |
zend_bool send_buffer = SG(request_info).headers_only ? 0 : 1; |
zend_bool send_buffer = SG(request_info).headers_only ? 0 : 1; |
|
|
if (CG(unclean_shutdown) && PG(last_error_type) == E_ERROR && |
if (CG(unclean_shutdown) && PG(last_error_type) == E_ERROR && |
OG(ob_nesting_level) && !OG(active_ob_buffer).chunk_size && PG(memory_limit) < zend_memory_usage(1 TSRMLS_CC)) { | (size_t)PG(memory_limit) < zend_memory_usage(1 TSRMLS_CC) |
| ) { |
send_buffer = 0; |
send_buffer = 0; |
} |
} |
php_end_ob_buffers(send_buffer TSRMLS_CC); | |
| if (!send_buffer) { |
| php_output_discard_all(TSRMLS_C); |
| } else { |
| php_output_end_all(TSRMLS_C); |
| } |
} zend_end_try(); |
} zend_end_try(); |
|
|
/* 4. Send the set HTTP headers (note: This must be done AFTER php_end_ob_buffers() !!) */ | /* 4. Shutdown output layer (send the set HTTP headers, cleanup output handlers, etc.) */ |
zend_try { |
zend_try { |
sapi_send_headers(TSRMLS_C); | php_output_deactivate(TSRMLS_C); |
} zend_end_try(); |
} zend_end_try(); |
|
|
/* 5. Call all extensions RSHUTDOWN functions */ | /* 5. Reset max_execution_time (no longer executing php code after response sent) */ |
| zend_try { |
| zend_unset_timeout(TSRMLS_C); |
| } zend_end_try(); |
| |
| /* 6. Call all extensions RSHUTDOWN functions */ |
if (PG(modules_activated)) { |
if (PG(modules_activated)) { |
zend_deactivate_modules(TSRMLS_C); |
zend_deactivate_modules(TSRMLS_C); |
php_free_shutdown_functions(TSRMLS_C); |
php_free_shutdown_functions(TSRMLS_C); |
} |
} |
|
|
/* 6. Destroy super-globals */ | /* 7. Destroy super-globals */ |
zend_try { |
zend_try { |
int i; |
int i; |
|
|
Line 1650 void php_request_shutdown(void *dummy)
|
Line 1767 void php_request_shutdown(void *dummy)
|
} |
} |
} zend_end_try(); |
} zend_end_try(); |
|
|
/* 6.5 free last error information */ | /* 7.5 free last error information */ |
if (PG(last_error_message)) { |
if (PG(last_error_message)) { |
free(PG(last_error_message)); |
free(PG(last_error_message)); |
PG(last_error_message) = NULL; |
PG(last_error_message) = NULL; |
Line 1682 void php_request_shutdown(void *dummy)
|
Line 1799 void php_request_shutdown(void *dummy)
|
zend_try { |
zend_try { |
shutdown_memory_manager(CG(unclean_shutdown) || !report_memleaks, 0 TSRMLS_CC); |
shutdown_memory_manager(CG(unclean_shutdown) || !report_memleaks, 0 TSRMLS_CC); |
} zend_end_try(); |
} zend_end_try(); |
|
zend_interned_strings_restore(TSRMLS_C); |
|
|
/* 12. Reset max_execution_time */ |
/* 12. Reset max_execution_time */ |
zend_try { |
zend_try { |
Line 1694 void php_request_shutdown(void *dummy)
|
Line 1812 void php_request_shutdown(void *dummy)
|
PG(com_initialized) = 0; |
PG(com_initialized) = 0; |
} |
} |
#endif |
#endif |
|
|
|
#ifdef HAVE_DTRACE |
|
DTRACE_REQUEST_SHUTDOWN(SAFE_FILENAME(SG(request_info).path_translated), SAFE_FILENAME(SG(request_info).request_uri), SAFE_FILENAME(SG(request_info).request_method)); |
|
#endif /* HAVE_DTRACE */ |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 1711 PHPAPI void php_com_initialize(TSRMLS_D)
|
Line 1833 PHPAPI void php_com_initialize(TSRMLS_D)
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
/* {{{ php_body_write_wrapper | /* {{{ php_output_wrapper |
*/ |
*/ |
static int php_body_write_wrapper(const char *str, uint str_length) | static int php_output_wrapper(const char *str, uint str_length) |
{ |
{ |
TSRMLS_FETCH(); |
TSRMLS_FETCH(); |
return php_body_write(str, str_length TSRMLS_CC); | return php_output_write(str, str_length TSRMLS_CC); |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 1748 static void core_globals_dtor(php_core_globals *core_g
|
Line 1870 static void core_globals_dtor(php_core_globals *core_g
|
if (core_globals->disable_classes) { |
if (core_globals->disable_classes) { |
free(core_globals->disable_classes); |
free(core_globals->disable_classes); |
} |
} |
|
if (core_globals->php_binary) { |
|
free(core_globals->php_binary); |
|
} |
|
|
php_shutdown_ticks(TSRMLS_C); |
php_shutdown_ticks(TSRMLS_C); |
} |
} |
Line 1779 int php_register_extensions(zend_module_entry **ptr, i
|
Line 1904 int php_register_extensions(zend_module_entry **ptr, i
|
} |
} |
/* }}} */ |
/* }}} */ |
|
|
#if defined(PHP_WIN32) && defined(_MSC_VER) && (_MSC_VER >= 1400) | #if defined(PHP_WIN32) && _MSC_VER >= 1400 |
static _invalid_parameter_handler old_invalid_parameter_handler; |
static _invalid_parameter_handler old_invalid_parameter_handler; |
|
|
void dummy_invalid_parameter_handler( |
void dummy_invalid_parameter_handler( |
Line 1813 void dummy_invalid_parameter_handler(
|
Line 1938 void dummy_invalid_parameter_handler(
|
} |
} |
#endif |
#endif |
|
|
#if SUHOSIN_PATCH |
|
PHPAPI void suhosin_startup(); |
|
#endif |
|
|
|
/* {{{ php_module_startup |
/* {{{ php_module_startup |
*/ |
*/ |
int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules) |
int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint num_additional_modules) |
{ |
{ |
zend_utility_functions zuf; |
zend_utility_functions zuf; |
zend_utility_values zuv; |
zend_utility_values zuv; |
int module_number=0; /* for REGISTER_INI_ENTRIES() */ | int retval = SUCCESS, module_number=0; /* for REGISTER_INI_ENTRIES() */ |
char *php_os; |
char *php_os; |
zend_module_entry *module; |
zend_module_entry *module; |
#ifdef ZTS |
#ifdef ZTS |
Line 1831 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 1952 int php_module_startup(sapi_module_struct *sf, zend_mo
|
void ***tsrm_ls; |
void ***tsrm_ls; |
php_core_globals *core_globals; |
php_core_globals *core_globals; |
#endif |
#endif |
|
|
#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK)) |
#if defined(PHP_WIN32) || (defined(NETWARE) && defined(USE_WINSOCK)) |
WORD wVersionRequested = MAKEWORD(2, 0); |
WORD wVersionRequested = MAKEWORD(2, 0); |
WSADATA wsaData; |
WSADATA wsaData; |
#endif |
#endif |
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
DWORD dwVersion = GetVersion(); | php_os = "WINNT"; |
/* Get build numbers for Windows NT or Win95 */ | #if _MSC_VER >= 1400 |
if (dwVersion < 0x80000000){ | |
php_os="WINNT"; | |
} else { | |
php_os="WIN32"; | |
} | |
#if defined(_MSC_VER) && (_MSC_VER >= 1400) | |
old_invalid_parameter_handler = |
old_invalid_parameter_handler = |
_set_invalid_parameter_handler(dummy_invalid_parameter_handler); |
_set_invalid_parameter_handler(dummy_invalid_parameter_handler); |
if (old_invalid_parameter_handler != NULL) { |
if (old_invalid_parameter_handler != NULL) { |
Line 1865 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 1981 int php_module_startup(sapi_module_struct *sf, zend_mo
|
php_win32_init_rng_lock(); |
php_win32_init_rng_lock(); |
#endif |
#endif |
|
|
#if SUHOSIN_PATCH |
|
suhosin_startup(); |
|
#endif |
|
|
|
module_shutdown = 0; |
module_shutdown = 0; |
module_startup = 1; |
module_startup = 1; |
sapi_initialize_empty_request(TSRMLS_C); |
sapi_initialize_empty_request(TSRMLS_C); |
Line 1884 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 1996 int php_module_startup(sapi_module_struct *sf, zend_mo
|
|
|
zuf.error_function = php_error_cb; |
zuf.error_function = php_error_cb; |
zuf.printf_function = php_printf; |
zuf.printf_function = php_printf; |
zuf.write_function = php_body_write_wrapper; | zuf.write_function = php_output_wrapper; |
zuf.fopen_function = php_fopen_wrapper_for_zend; |
zuf.fopen_function = php_fopen_wrapper_for_zend; |
zuf.message_handler = php_message_handler_for_zend; |
zuf.message_handler = php_message_handler_for_zend; |
zuf.block_interruptions = sapi_module.block_interruptions; |
zuf.block_interruptions = sapi_module.block_interruptions; |
Line 1991 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2103 int php_module_startup(sapi_module_struct *sf, zend_mo
|
REGISTER_MAIN_STRINGL_CONSTANT("PHP_CONFIG_FILE_SCAN_DIR", PHP_CONFIG_FILE_SCAN_DIR, sizeof(PHP_CONFIG_FILE_SCAN_DIR)-1, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_STRINGL_CONSTANT("PHP_CONFIG_FILE_SCAN_DIR", PHP_CONFIG_FILE_SCAN_DIR, sizeof(PHP_CONFIG_FILE_SCAN_DIR)-1, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_STRINGL_CONSTANT("PHP_SHLIB_SUFFIX", PHP_SHLIB_SUFFIX, sizeof(PHP_SHLIB_SUFFIX)-1, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_STRINGL_CONSTANT("PHP_SHLIB_SUFFIX", PHP_SHLIB_SUFFIX, sizeof(PHP_SHLIB_SUFFIX)-1, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_STRINGL_CONSTANT("PHP_EOL", PHP_EOL, sizeof(PHP_EOL)-1, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_STRINGL_CONSTANT("PHP_EOL", PHP_EOL, sizeof(PHP_EOL)-1, CONST_PERSISTENT | CONST_CS); |
#if SUHOSIN_PATCH | REGISTER_MAIN_LONG_CONSTANT("PHP_MAXPATHLEN", MAXPATHLEN, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_LONG_CONSTANT("SUHOSIN_PATCH", 1, CONST_PERSISTENT | CONST_CS); | |
REGISTER_MAIN_STRINGL_CONSTANT("SUHOSIN_PATCH_VERSION", SUHOSIN_PATCH_VERSION, sizeof(SUHOSIN_PATCH_VERSION)-1, CONST_PERSISTENT | CONST_CS); | |
#endif | |
REGISTER_MAIN_LONG_CONSTANT("PHP_MAXPATHLEN", MAXPATHLEN, CONST_PERSISTENT | CONST_CS); | |
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_MAX", LONG_MAX, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_MAX", LONG_MAX, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_SIZE", sizeof(long), CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_LONG_CONSTANT("PHP_INT_SIZE", sizeof(long), CONST_PERSISTENT | CONST_CS); |
#ifdef ZEND_MULTIBYTE |
|
REGISTER_MAIN_LONG_CONSTANT("ZEND_MULTIBYTE", 1, CONST_PERSISTENT | CONST_CS); |
|
#else |
|
REGISTER_MAIN_LONG_CONSTANT("ZEND_MULTIBYTE", 0, CONST_PERSISTENT | CONST_CS); |
|
#endif |
|
|
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
REGISTER_MAIN_LONG_CONSTANT("PHP_WINDOWS_VERSION_MAJOR", EG(windows_version_info).dwMajorVersion, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_LONG_CONSTANT("PHP_WINDOWS_VERSION_MAJOR", EG(windows_version_info).dwMajorVersion, CONST_PERSISTENT | CONST_CS); |
Line 2018 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2121 int php_module_startup(sapi_module_struct *sf, zend_mo
|
REGISTER_MAIN_LONG_CONSTANT("PHP_WINDOWS_NT_WORKSTATION", VER_NT_WORKSTATION, CONST_PERSISTENT | CONST_CS); |
REGISTER_MAIN_LONG_CONSTANT("PHP_WINDOWS_NT_WORKSTATION", VER_NT_WORKSTATION, CONST_PERSISTENT | CONST_CS); |
#endif |
#endif |
|
|
|
php_binary_init(TSRMLS_C); |
|
if (PG(php_binary)) { |
|
REGISTER_MAIN_STRINGL_CONSTANT("PHP_BINARY", PG(php_binary), strlen(PG(php_binary)), CONST_PERSISTENT | CONST_CS); |
|
} else { |
|
REGISTER_MAIN_STRINGL_CONSTANT("PHP_BINARY", "", 0, CONST_PERSISTENT | CONST_CS); |
|
} |
|
|
php_output_register_constants(TSRMLS_C); |
php_output_register_constants(TSRMLS_C); |
php_rfc1867_register_constants(TSRMLS_C); |
php_rfc1867_register_constants(TSRMLS_C); |
|
|
Line 2034 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2144 int php_module_startup(sapi_module_struct *sf, zend_mo
|
/* Register Zend ini entries */ |
/* Register Zend ini entries */ |
zend_register_standard_ini_entries(TSRMLS_C); |
zend_register_standard_ini_entries(TSRMLS_C); |
|
|
/* Disable realpath cache if safe_mode or open_basedir are set */ | /* Disable realpath cache if an open_basedir is set */ |
if (PG(safe_mode) || (PG(open_basedir) && *PG(open_basedir))) { | if (PG(open_basedir) && *PG(open_basedir)) { |
CWDG(realpath_cache_size_limit) = 0; |
CWDG(realpath_cache_size_limit) = 0; |
} |
} |
|
|
Line 2083 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2193 int php_module_startup(sapi_module_struct *sf, zend_mo
|
/* start Zend extensions */ |
/* start Zend extensions */ |
zend_startup_extensions(); |
zend_startup_extensions(); |
|
|
|
zend_collect_module_handlers(TSRMLS_C); |
|
|
/* register additional functions */ |
/* register additional functions */ |
if (sapi_module.additional_functions) { |
if (sapi_module.additional_functions) { |
if (zend_hash_find(&module_registry, "standard", sizeof("standard"), (void**)&module)==SUCCESS) { |
if (zend_hash_find(&module_registry, "standard", sizeof("standard"), (void**)&module)==SUCCESS) { |
Line 2105 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2217 int php_module_startup(sapi_module_struct *sf, zend_mo
|
|
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
/* Disable incompatible functions for the running platform */ |
/* Disable incompatible functions for the running platform */ |
if (php_win32_disable_functions() == FAILURE) { | if (php_win32_disable_functions(TSRMLS_C) == FAILURE) { |
php_printf("Unable to disable unsupported functions\n"); |
php_printf("Unable to disable unsupported functions\n"); |
return FAILURE; |
return FAILURE; |
} |
} |
Line 2118 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2230 int php_module_startup(sapi_module_struct *sf, zend_mo
|
module_initialized = 1; |
module_initialized = 1; |
|
|
/* Check for deprecated directives */ |
/* Check for deprecated directives */ |
/* NOTE: If you add anything here, remember to add it also in Makefile.global! */ | /* NOTE: If you add anything here, remember to add it to Makefile.global! */ |
{ |
{ |
static const char *directives[] = { | struct { |
"define_syslog_variables", | const long error_level; |
"register_globals", | const char *phrase; |
"register_long_arrays", | const char *directives[16]; /* Remember to change this if the number of directives change */ |
"safe_mode", | } directives[2] = { |
"magic_quotes_gpc", | { |
"magic_quotes_runtime", | E_DEPRECATED, |
"magic_quotes_sybase", | "Directive '%s' is deprecated in PHP 5.3 and greater", |
NULL | { |
| NULL |
| } |
| }, |
| { |
| E_CORE_ERROR, |
| "Directive '%s' is no longer available in PHP", |
| { |
| "allow_call_time_pass_reference", |
| "define_syslog_variables", |
| "highlight.bg", |
| "magic_quotes_gpc", |
| "magic_quotes_runtime", |
| "magic_quotes_sybase", |
| "register_globals", |
| "register_long_arrays", |
| "safe_mode", |
| "safe_mode_gid", |
| "safe_mode_include_dir", |
| "safe_mode_exec_dir", |
| "safe_mode_allowed_env_vars", |
| "safe_mode_protected_env_vars", |
| "zend.ze1_compatibility_mode", |
| NULL |
| } |
| } |
}; |
}; |
const char **p = directives; |
|
long val; |
|
|
|
while (*p) { | unsigned int i; |
if (cfg_get_long((char*)*p, &val) == SUCCESS && val) { | |
zend_error(E_DEPRECATED, "Directive '%s' is deprecated in PHP 5.3 and greater", *p); | zend_try { |
} | /* 2 = Count of deprecation structs */ |
++p; | for (i = 0; i < 2; i++) { |
} | const char **p = directives[i].directives; |
|
|
/* This is not too nice, but since its the only one theres no need for extra stuff here */ | while(*p) { |
if (cfg_get_long("zend.ze1_compatibility_mode", &val) == SUCCESS && val) { | long value; |
zend_error(E_CORE_ERROR, "zend.ze1_compatibility_mode is no longer supported in PHP 5.3 and greater"); | |
} | if (cfg_get_long((char*)*p, &value) == SUCCESS && value) { |
| zend_error(directives[i].error_level, directives[i].phrase, *p); |
| } |
| |
| ++p; |
| } |
| } |
| } zend_catch { |
| retval = FAILURE; |
| } zend_end_try(); |
} |
} |
|
|
sapi_deactivate(TSRMLS_C); |
sapi_deactivate(TSRMLS_C); |
module_startup = 0; |
module_startup = 0; |
|
|
shutdown_memory_manager(1, 0 TSRMLS_CC); |
shutdown_memory_manager(1, 0 TSRMLS_CC); |
|
zend_interned_strings_snapshot(TSRMLS_C); |
|
|
/* we're done */ |
/* we're done */ |
return SUCCESS; | return retval; |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 2212 void php_module_shutdown(TSRMLS_D)
|
Line 2357 void php_module_shutdown(TSRMLS_D)
|
#ifndef ZTS |
#ifndef ZTS |
zend_ini_shutdown(TSRMLS_C); |
zend_ini_shutdown(TSRMLS_C); |
shutdown_memory_manager(CG(unclean_shutdown), 1 TSRMLS_CC); |
shutdown_memory_manager(CG(unclean_shutdown), 1 TSRMLS_CC); |
core_globals_dtor(&core_globals TSRMLS_CC); |
|
gc_globals_dtor(TSRMLS_C); |
|
#else |
#else |
zend_ini_global_shutdown(TSRMLS_C); |
zend_ini_global_shutdown(TSRMLS_C); |
ts_free_id(core_globals_id); |
|
#endif |
#endif |
|
|
|
php_output_shutdown(); |
php_shutdown_temporary_directory(); |
php_shutdown_temporary_directory(); |
|
|
module_initialized = 0; |
module_initialized = 0; |
|
|
|
#ifndef ZTS |
|
core_globals_dtor(&core_globals TSRMLS_CC); |
|
gc_globals_dtor(TSRMLS_C); |
|
#else |
|
ts_free_id(core_globals_id); |
|
#endif |
|
|
#if defined(PHP_WIN32) && defined(_MSC_VER) && (_MSC_VER >= 1400) |
#if defined(PHP_WIN32) && defined(_MSC_VER) && (_MSC_VER >= 1400) |
if (old_invalid_parameter_handler == NULL) { |
if (old_invalid_parameter_handler == NULL) { |
_set_invalid_parameter_handler(old_invalid_parameter_handler); |
_set_invalid_parameter_handler(old_invalid_parameter_handler); |
Line 2272 PHPAPI int php_execute_script(zend_file_handle *primar
|
Line 2422 PHPAPI int php_execute_script(zend_file_handle *primar
|
/* this looks nasty to me */ |
/* this looks nasty to me */ |
old_cwd_fd = open(".", 0); |
old_cwd_fd = open(".", 0); |
#else |
#else |
VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1); | php_ignore_value(VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1)); |
#endif |
#endif |
VCWD_CHDIR_FILE(primary_file->filename); |
VCWD_CHDIR_FILE(primary_file->filename); |
} |
} |
Line 2331 PHPAPI int php_execute_script(zend_file_handle *primar
|
Line 2481 PHPAPI int php_execute_script(zend_file_handle *primar
|
} |
} |
#else |
#else |
if (old_cwd[0] != '\0') { |
if (old_cwd[0] != '\0') { |
VCWD_CHDIR(old_cwd); | php_ignore_value(VCWD_CHDIR(old_cwd)); |
} |
} |
free_alloca(old_cwd, use_heap); |
free_alloca(old_cwd, use_heap); |
#endif |
#endif |
Line 2361 PHPAPI int php_execute_simple_script(zend_file_handle
|
Line 2511 PHPAPI int php_execute_simple_script(zend_file_handle
|
PG(during_request_startup) = 0; |
PG(during_request_startup) = 0; |
|
|
if (primary_file->filename && !(SG(options) & SAPI_OPTION_NO_CHDIR)) { |
if (primary_file->filename && !(SG(options) & SAPI_OPTION_NO_CHDIR)) { |
VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1); | php_ignore_value(VCWD_GETCWD(old_cwd, OLD_CWD_SIZE-1)); |
VCWD_CHDIR_FILE(primary_file->filename); |
VCWD_CHDIR_FILE(primary_file->filename); |
} |
} |
zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, ret, 1, primary_file); |
zend_execute_scripts(ZEND_REQUIRE TSRMLS_CC, ret, 1, primary_file); |
} zend_end_try(); |
} zend_end_try(); |
|
|
if (old_cwd[0] != '\0') { |
if (old_cwd[0] != '\0') { |
VCWD_CHDIR(old_cwd); | php_ignore_value(VCWD_CHDIR(old_cwd)); |
} |
} |
|
|
free_alloca(old_cwd, use_heap); |
free_alloca(old_cwd, use_heap); |
Line 2383 PHPAPI void php_handle_aborted_connection(void)
|
Line 2533 PHPAPI void php_handle_aborted_connection(void)
|
TSRMLS_FETCH(); |
TSRMLS_FETCH(); |
|
|
PG(connection_status) = PHP_CONNECTION_ABORTED; |
PG(connection_status) = PHP_CONNECTION_ABORTED; |
php_output_set_status(0 TSRMLS_CC); | php_output_set_status(PHP_OUTPUT_DISABLED TSRMLS_CC); |
|
|
if (!PG(ignore_user_abort)) { |
if (!PG(ignore_user_abort)) { |
zend_bailout(); |
zend_bailout(); |