/* {{{ php_register_server_variables */ static inline void php_register_server_variables(void) { zval_ptr_dtor(&PG(http_globals)[TRACK_VARS_SERVER]); array_init(&PG(http_globals)[TRACK_VARS_SERVER]); /* Server variables */ if (sapi_module.register_server_variables) { sapi_module.register_server_variables(&PG(http_globals)[TRACK_VARS_SERVER]); } /* PHP Authentication support */ if (SG(request_info).auth_user) { php_register_variable("PHP_AUTH_USER", SG(request_info).auth_user, &PG(http_globals)[TRACK_VARS_SERVER]); } if (SG(request_info).auth_password) { php_register_variable("PHP_AUTH_PW", SG(request_info).auth_password, &PG(http_globals)[TRACK_VARS_SERVER]); } if (SG(request_info).auth_digest) { php_register_variable("PHP_AUTH_DIGEST", SG(request_info).auth_digest, &PG(http_globals)[TRACK_VARS_SERVER]); } /* store request init time */ { zval request_time_float, request_time_long; ZVAL_DOUBLE(&request_time_float, sapi_get_request_time()); php_register_variable_ex("REQUEST_TIME_FLOAT", &request_time_float, &PG(http_globals)[TRACK_VARS_SERVER]); ZVAL_LONG(&request_time_long, zend_dval_to_lval(Z_DVAL(request_time_float))); php_register_variable_ex("REQUEST_TIME", &request_time_long, &PG(http_globals)[TRACK_VARS_SERVER]); } }
/* binary-safe version */ PHPAPI void php_register_variable_safe(char *var, char *strval, size_t str_len, zval *track_vars_array) { zval new_entry; assert(strval != NULL); /* Prepare value */ ZVAL_NEW_STR(&new_entry, zend_string_init(strval, str_len, 0)); php_register_variable_ex(var, &new_entry, track_vars_array); }
/* binary-safe version */ PHPAPI void php_register_variable_safe(char *var, char *strval, size_t str_len, zval *track_vars_array) { zval new_entry; assert(strval != NULL); /* Prepare value */ if (str_len == 0) { ZVAL_EMPTY_STRING(&new_entry); } else if (str_len == 1) { ZVAL_INTERNED_STR(&new_entry, ZSTR_CHAR((zend_uchar)*strval)); } else { ZVAL_NEW_STR(&new_entry, zend_string_init(strval, str_len, 0)); } php_register_variable_ex(var, &new_entry, track_vars_array); }
/* {{{ apache_php_module_hook */ int apache_php_module_hook(request_rec *r, php_handler *handler, zval **ret) { zend_file_handle file_handle; zval *req; char *tmp; #if PHP_SIGCHILD signal(SIGCHLD, sigchld_handler); #endif if(AP(current_hook) == AP_RESPONSE) { if (php_request_startup_for_hook() == FAILURE) return FAILURE; } else { if (php_request_startup_for_hook() == FAILURE) return FAILURE; } req = php_apache_request_new(r); php_register_variable_ex("request", req, PG(http_globals)[TRACK_VARS_SERVER]); switch(handler->type) { case AP_HANDLER_TYPE_FILE: php_register_variable("PHP_SELF_HOOK", handler->name, PG(http_globals)[TRACK_VARS_SERVER]); memset(&file_handle, 0, sizeof(file_handle)); file_handle.type = ZEND_HANDLE_FILENAME; file_handle.filename = handler->name; (void) php_execute_simple_script(&file_handle, ret); break; case AP_HANDLER_TYPE_METHOD: if( (tmp = strstr(handler->name, "::")) != NULL && *(tmp+2) != '\0' ) { zval *class; zval *method; *tmp = '\0'; ALLOC_ZVAL(class); ZVAL_STRING(class, handler->name, 1); ALLOC_ZVAL(method); ZVAL_STRING(method, tmp +2, 1); *tmp = ':'; call_user_function_ex(EG(function_table), &class, method, ret, 0, NULL, 0, NULL); zval_dtor(class); zval_dtor(method); } else {
static void safe_php_register_variable_ex(char *var, zval *val, zval *track_vars_array, zend_bool override_protection) /* {{{ */ { if (override_protection || !is_protected_variable(var)) { php_register_variable_ex(var, val, track_vars_array); } }