version 1.1.1.2, 2012/05/29 12:34:35
|
version 1.1.1.5, 2014/06/15 20:04:01
|
Line 2
|
Line 2
|
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| PHP Version 5 | |
| PHP Version 5 | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| Copyright (c) 1997-2012 The PHP Group | | | Copyright (c) 1997-2014 The PHP Group | |
+----------------------------------------------------------------------+ |
+----------------------------------------------------------------------+ |
| This source file is subject to version 3.01 of the PHP license, | |
| This source file is subject to version 3.01 of the PHP license, | |
| that is bundled with this package in the file LICENSE, and is | |
| that is bundled with this package in the file LICENSE, and is | |
Line 115
|
Line 115
|
#endif |
#endif |
/* }}} */ |
/* }}} */ |
|
|
|
#ifndef S_ISREG |
|
#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) |
|
#endif |
|
|
PHPAPI int (*php_register_internal_extensions_func)(TSRMLS_D) = php_register_internal_extensions; |
PHPAPI int (*php_register_internal_extensions_func)(TSRMLS_D) = php_register_internal_extensions; |
|
|
#ifndef ZTS |
#ifndef ZTS |
Line 257 static void php_disable_classes(TSRMLS_D)
|
Line 261 static void php_disable_classes(TSRMLS_D)
|
|
|
/* {{{ php_binary_init |
/* {{{ php_binary_init |
*/ |
*/ |
static void php_binary_init(TSRMLS_D) | static void php_binary_init(TSRMLS_D) |
{ |
{ |
char *binary_location; |
char *binary_location; |
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
Line 276 static void php_binary_init(TSRMLS_D)
|
Line 280 static void php_binary_init(TSRMLS_D)
|
if ((envpath = getenv("PATH")) != NULL) { |
if ((envpath = getenv("PATH")) != NULL) { |
char *search_dir, search_path[MAXPATHLEN]; |
char *search_dir, search_path[MAXPATHLEN]; |
char *last = NULL; |
char *last = NULL; |
|
struct stat s; |
|
|
path = estrdup(envpath); |
path = estrdup(envpath); |
search_dir = php_strtok_r(path, ":", &last); |
search_dir = php_strtok_r(path, ":", &last); |
|
|
while (search_dir) { |
while (search_dir) { |
snprintf(search_path, MAXPATHLEN, "%s/%s", search_dir, sapi_module.executable_location); |
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)) { | if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK) && VCWD_STAT(binary_location, &s) == 0 && S_ISREG(s.st_mode)) { |
found = 1; |
found = 1; |
break; |
break; |
} |
} |
Line 597 PHPAPI int php_get_module_initialized(void)
|
Line 602 PHPAPI int php_get_module_initialized(void)
|
{ |
{ |
return module_initialized; |
return module_initialized; |
} |
} |
|
/* }}} */ |
|
|
/* {{{ php_log_err |
/* {{{ php_log_err |
*/ |
*/ |
Line 627 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
|
Line 633 PHPAPI void php_log_err(char *log_message TSRMLS_DC)
|
char *error_time_str; |
char *error_time_str; |
|
|
time(&error_time); |
time(&error_time); |
error_time_str = php_format_date("d-M-Y H:i:s e", 13, error_time, 0 TSRMLS_CC); | #ifdef ZTS |
| if (!php_during_module_startup()) { |
| error_time_str = php_format_date("d-M-Y H:i:s e", 13, error_time, 1 TSRMLS_CC); |
| } else { |
| error_time_str = php_format_date("d-M-Y H:i:s e", 13, error_time, 0 TSRMLS_CC); |
| } |
| #else |
| error_time_str = php_format_date("d-M-Y H:i:s e", 13, error_time, 1 TSRMLS_CC); |
| #endif |
len = spprintf(&tmp, 0, "[%s] %s%s", error_time_str, log_message, PHP_EOL); |
len = spprintf(&tmp, 0, "[%s] %s%s", error_time_str, log_message, PHP_EOL); |
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
php_flock(fd, 2); |
php_flock(fd, 2); |
Line 775 PHPAPI void php_verror(const char *docref, const char
|
Line 789 PHPAPI void php_verror(const char *docref, const char
|
/* no docref given but function is known (the default) */ |
/* no docref given but function is known (the default) */ |
if (!docref && is_function) { |
if (!docref && is_function) { |
int doclen; |
int doclen; |
|
while (*function == '_') { |
|
function++; |
|
} |
if (space[0] == '\0') { |
if (space[0] == '\0') { |
doclen = spprintf(&docref_buf, 0, "function.%s", function); |
doclen = spprintf(&docref_buf, 0, "function.%s", function); |
} else { |
} else { |
Line 836 PHPAPI void php_verror(const char *docref, const char
|
Line 853 PHPAPI void php_verror(const char *docref, const char
|
efree(docref_buf); |
efree(docref_buf); |
} |
} |
|
|
if (PG(track_errors) && module_initialized && | if (PG(track_errors) && module_initialized && |
(!EG(user_error_handler) || !(EG(user_error_handler_error_reporting) & type))) { |
(!EG(user_error_handler) || !(EG(user_error_handler_error_reporting) & type))) { |
if (!EG(active_symbol_table)) { |
if (!EG(active_symbol_table)) { |
zend_rebuild_symbol_table(TSRMLS_C); |
zend_rebuild_symbol_table(TSRMLS_C); |
Line 953 static void php_error_cb(int type, const char *error_f
|
Line 970 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 |
#ifdef ZEND_SIGNALS |
HANDLE_BLOCK_INTERRUPTIONS(); | HANDLE_BLOCK_INTERRUPTIONS(); |
#endif |
#endif |
if (PG(last_error_message)) { |
if (PG(last_error_message)) { |
free(PG(last_error_message)); |
free(PG(last_error_message)); |
Line 1080 static void php_error_cb(int type, const char *error_f
|
Line 1097 static void php_error_cb(int type, const char *error_f
|
PG(display_errors) == PHP_DISPLAY_ERRORS_STDERR |
PG(display_errors) == PHP_DISPLAY_ERRORS_STDERR |
) { |
) { |
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
fprintf(stderr, "%s: %s in %s on line%d\n", error_type_str, buffer, error_filename, error_lineno); | fprintf(stderr, "%s: %s in %s on line %d\n", error_type_str, buffer, error_filename, error_lineno); |
fflush(stderr); |
fflush(stderr); |
#else |
#else |
fprintf(stderr, "%s: %s in %s on line %d\n", error_type_str, buffer, error_filename, error_lineno); |
fprintf(stderr, "%s: %s in %s on line %d\n", error_type_str, buffer, error_filename, error_lineno); |
Line 1124 static void php_error_cb(int type, const char *error_f
|
Line 1141 static void php_error_cb(int type, const char *error_f
|
case E_PARSE: |
case E_PARSE: |
case E_COMPILE_ERROR: |
case E_COMPILE_ERROR: |
case E_USER_ERROR: |
case E_USER_ERROR: |
EG(exit_status) = 255; | { /* new block to allow variable definition */ |
| /* eval() errors do not affect exit_status or response code */ |
| zend_bool during_eval = (type == E_PARSE) && (EG(current_execute_data) && |
| EG(current_execute_data)->opline && |
| EG(current_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL && |
| EG(current_execute_data)->opline->extended_value == ZEND_EVAL); |
| if (!during_eval) { |
| EG(exit_status) = 255; |
| } |
if (module_initialized) { |
if (module_initialized) { |
if (!PG(display_errors) && |
if (!PG(display_errors) && |
!SG(headers_sent) && |
!SG(headers_sent) && |
SG(sapi_headers).http_response_code == 200 | SG(sapi_headers).http_response_code == 200 && |
| !during_eval |
) { |
) { |
sapi_header_line ctr = {0}; |
sapi_header_line ctr = {0}; |
|
|
Line 1149 static void php_error_cb(int type, const char *error_f
|
Line 1175 static void php_error_cb(int type, const char *error_f
|
} |
} |
} |
} |
break; |
break; |
|
} |
} |
} |
|
|
/* Log if necessary */ |
/* Log if necessary */ |
Line 1202 PHPAPI char *php_get_current_user(TSRMLS_D)
|
Line 1229 PHPAPI char *php_get_current_user(TSRMLS_D)
|
name[len] = '\0'; |
name[len] = '\0'; |
SG(request_info).current_user_length = len; |
SG(request_info).current_user_length = len; |
SG(request_info).current_user = estrndup(name, len); |
SG(request_info).current_user = estrndup(name, len); |
return SG(request_info).current_user; | return SG(request_info).current_user; |
#else |
#else |
struct passwd *pwd; |
struct passwd *pwd; |
#if defined(ZTS) && defined(HAVE_GETPWUID_R) && defined(_SC_GETPW_R_SIZE_MAX) |
#if defined(ZTS) && defined(HAVE_GETPWUID_R) && defined(_SC_GETPW_R_SIZE_MAX) |
Line 1230 PHPAPI char *php_get_current_user(TSRMLS_D)
|
Line 1257 PHPAPI char *php_get_current_user(TSRMLS_D)
|
#if defined(ZTS) && defined(HAVE_GETPWUID_R) && defined(_SC_GETPW_R_SIZE_MAX) |
#if defined(ZTS) && defined(HAVE_GETPWUID_R) && defined(_SC_GETPW_R_SIZE_MAX) |
efree(pwbuf); |
efree(pwbuf); |
#endif |
#endif |
return SG(request_info).current_user; | return SG(request_info).current_user; |
#endif |
#endif |
} | } |
} |
} |
/* }}} */ |
/* }}} */ |
|
|
Line 1247 PHP_FUNCTION(set_time_limit)
|
Line 1274 PHP_FUNCTION(set_time_limit)
|
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; |
} |
} |
| |
new_timeout_strlen = zend_spprintf(&new_timeout_str, 0, "%ld", new_timeout); |
new_timeout_strlen = zend_spprintf(&new_timeout_str, 0, "%ld", new_timeout); |
|
|
if (zend_alter_ini_entry_ex("max_execution_time", sizeof("max_execution_time"), new_timeout_str, new_timeout_strlen, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == SUCCESS) { |
if (zend_alter_ini_entry_ex("max_execution_time", sizeof("max_execution_time"), new_timeout_str, new_timeout_strlen, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0 TSRMLS_CC) == SUCCESS) { |
Line 1504 int php_request_startup(TSRMLS_D)
|
Line 1531 int php_request_startup(TSRMLS_D)
|
int retval = SUCCESS; |
int retval = SUCCESS; |
|
|
#ifdef HAVE_DTRACE |
#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)); | DTRACE_REQUEST_STARTUP(SAFE_FILENAME(SG(request_info).path_translated), SAFE_FILENAME(SG(request_info).request_uri), (char *)SAFE_FILENAME(SG(request_info).request_method)); |
#endif /* HAVE_DTRACE */ |
#endif /* HAVE_DTRACE */ |
|
|
#ifdef PHP_WIN32 |
#ifdef PHP_WIN32 |
Line 1740 void php_request_shutdown(void *dummy)
|
Line 1767 void php_request_shutdown(void *dummy)
|
} |
} |
} zend_end_try(); |
} zend_end_try(); |
|
|
/* 4. Shutdown output layer (send the set HTTP headers, cleanup output handlers, etc.) */ | /* 4. Reset max_execution_time (no longer executing php code after response sent) */ |
zend_try { |
zend_try { |
php_output_deactivate(TSRMLS_C); |
|
} zend_end_try(); |
|
|
|
/* 5. Reset max_execution_time (no longer executing php code after response sent) */ |
|
zend_try { |
|
zend_unset_timeout(TSRMLS_C); |
zend_unset_timeout(TSRMLS_C); |
} zend_end_try(); |
} zend_end_try(); |
|
|
/* 6. Call all extensions RSHUTDOWN functions */ | /* 5. 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. Shutdown output layer (send the set HTTP headers, cleanup output handlers, etc.) */ |
|
zend_try { |
|
php_output_deactivate(TSRMLS_C); |
|
} zend_end_try(); |
|
|
/* 7. Destroy super-globals */ |
/* 7. Destroy super-globals */ |
zend_try { |
zend_try { |
int i; |
int i; |
Line 1814 void php_request_shutdown(void *dummy)
|
Line 1841 void php_request_shutdown(void *dummy)
|
#endif |
#endif |
|
|
#ifdef HAVE_DTRACE |
#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)); | DTRACE_REQUEST_SHUTDOWN(SAFE_FILENAME(SG(request_info).path_translated), SAFE_FILENAME(SG(request_info).request_uri), (char *)SAFE_FILENAME(SG(request_info).request_method)); |
#endif /* HAVE_DTRACE */ |
#endif /* HAVE_DTRACE */ |
} |
} |
/* }}} */ |
/* }}} */ |
Line 1881 static void core_globals_dtor(php_core_globals *core_g
|
Line 1908 static void core_globals_dtor(php_core_globals *core_g
|
PHP_MINFO_FUNCTION(php_core) { /* {{{ */ |
PHP_MINFO_FUNCTION(php_core) { /* {{{ */ |
php_info_print_table_start(); |
php_info_print_table_start(); |
php_info_print_table_row(2, "PHP Version", PHP_VERSION); |
php_info_print_table_row(2, "PHP Version", PHP_VERSION); |
php_info_print_table_end(); | php_info_print_table_end(); |
DISPLAY_INI_ENTRIES(); |
DISPLAY_INI_ENTRIES(); |
} |
} |
/* }}} */ |
/* }}} */ |
Line 2051 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2078 int php_module_startup(sapi_module_struct *sf, zend_mo
|
EG(exception_class) = NULL; |
EG(exception_class) = NULL; |
PG(disable_functions) = NULL; |
PG(disable_functions) = NULL; |
PG(disable_classes) = NULL; |
PG(disable_classes) = NULL; |
|
EG(exception) = NULL; |
|
EG(objects_store).object_buckets = NULL; |
|
|
#if HAVE_SETLOCALE |
#if HAVE_SETLOCALE |
setlocale(LC_CTYPE, ""); |
setlocale(LC_CTYPE, ""); |
Line 2157 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2186 int php_module_startup(sapi_module_struct *sf, zend_mo
|
return FAILURE; |
return FAILURE; |
} |
} |
|
|
/* initialize registry for images to be used in phpinfo() | /* initialize registry for images to be used in phpinfo() |
(this uses configuration parameters from php.ini) |
(this uses configuration parameters from php.ini) |
*/ |
*/ |
if (php_init_info_logos() == FAILURE) { |
if (php_init_info_logos() == FAILURE) { |
Line 2203 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2232 int php_module_startup(sapi_module_struct *sf, zend_mo
|
EG(current_module) = NULL; |
EG(current_module) = NULL; |
} |
} |
} |
} |
| |
/* disable certain classes and functions as requested by php.ini */ |
/* disable certain classes and functions as requested by php.ini */ |
php_disable_functions(TSRMLS_C); |
php_disable_functions(TSRMLS_C); |
php_disable_classes(TSRMLS_C); |
php_disable_classes(TSRMLS_C); |
Line 2238 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2267 int php_module_startup(sapi_module_struct *sf, zend_mo
|
const char *directives[16]; /* Remember to change this if the number of directives change */ |
const char *directives[16]; /* Remember to change this if the number of directives change */ |
} directives[2] = { |
} directives[2] = { |
{ |
{ |
E_DEPRECATED, | E_DEPRECATED, |
"Directive '%s' is deprecated in PHP 5.3 and greater", | "Directive '%s' is deprecated in PHP 5.3 and greater", |
{ |
{ |
NULL |
NULL |
} |
} |
}, | }, |
{ |
{ |
E_CORE_ERROR, | E_CORE_ERROR, |
"Directive '%s' is no longer available in PHP", | "Directive '%s' is no longer available in PHP", |
{ |
{ |
"allow_call_time_pass_reference", |
"allow_call_time_pass_reference", |
"define_syslog_variables", | "define_syslog_variables", |
"highlight.bg", | "highlight.bg", |
"magic_quotes_gpc", | "magic_quotes_gpc", |
"magic_quotes_runtime", | "magic_quotes_runtime", |
"magic_quotes_sybase", | "magic_quotes_sybase", |
"register_globals", | "register_globals", |
"register_long_arrays", | "register_long_arrays", |
"safe_mode", | "safe_mode", |
"safe_mode_gid", | "safe_mode_gid", |
"safe_mode_include_dir", | "safe_mode_include_dir", |
"safe_mode_exec_dir", | "safe_mode_exec_dir", |
"safe_mode_allowed_env_vars", | "safe_mode_allowed_env_vars", |
"safe_mode_protected_env_vars", | "safe_mode_protected_env_vars", |
"zend.ze1_compatibility_mode", | "zend.ze1_compatibility_mode", |
NULL |
NULL |
} |
} |
} |
} |
}; |
}; |
|
|
unsigned int i; |
unsigned int i; |
| |
zend_try { |
zend_try { |
/* 2 = Count of deprecation structs */ |
/* 2 = Count of deprecation structs */ |
for (i = 0; i < 2; i++) { |
for (i = 0; i < 2; i++) { |
Line 2289 int php_module_startup(sapi_module_struct *sf, zend_mo
|
Line 2318 int php_module_startup(sapi_module_struct *sf, zend_mo
|
retval = FAILURE; |
retval = FAILURE; |
} zend_end_try(); |
} zend_end_try(); |
} |
} |
| |
sapi_deactivate(TSRMLS_C); |
sapi_deactivate(TSRMLS_C); |
module_startup = 0; |
module_startup = 0; |
|
|
Line 2344 void php_module_shutdown(TSRMLS_D)
|
Line 2373 void php_module_shutdown(TSRMLS_D)
|
sapi_flush(TSRMLS_C); |
sapi_flush(TSRMLS_C); |
|
|
zend_shutdown(TSRMLS_C); |
zend_shutdown(TSRMLS_C); |
| |
/* Destroys filter & transport registries too */ |
/* Destroys filter & transport registries too */ |
php_shutdown_stream_wrappers(module_number TSRMLS_CC); |
php_shutdown_stream_wrappers(module_number TSRMLS_CC); |
|
|
Line 2388 PHPAPI int php_execute_script(zend_file_handle *primar
|
Line 2417 PHPAPI int php_execute_script(zend_file_handle *primar
|
zend_file_handle *prepend_file_p, *append_file_p; |
zend_file_handle *prepend_file_p, *append_file_p; |
zend_file_handle prepend_file = {0}, append_file = {0}; |
zend_file_handle prepend_file = {0}, append_file = {0}; |
#if HAVE_BROKEN_GETCWD |
#if HAVE_BROKEN_GETCWD |
int old_cwd_fd = -1; | volatile int old_cwd_fd = -1; |
#else |
#else |
char *old_cwd; |
char *old_cwd; |
ALLOCA_FLAG(use_heap) |
ALLOCA_FLAG(use_heap) |