dmitry Tue Apr 15 11:31:58 2008 UTC Modified files: (Branch: PHP_5_3) /php-src/main php_ini.c php_ini.h /php-src/sapi/cgi cgi_main.c Log: Optimized request startup sequence for php.ini without per dir and per host configurations http://cvs.php.net/viewvc.cgi/php-src/main/php_ini.c?r1=1.136.2.4.2.15.2.7&r2=1.136.2.4.2.15.2.8&diff_format=u Index: php-src/main/php_ini.c diff -u php-src/main/php_ini.c:1.136.2.4.2.15.2.7 php-src/main/php_ini.c:1.136.2.4.2.15.2.8 --- php-src/main/php_ini.c:1.136.2.4.2.15.2.7 Sun Feb 3 14:35:59 2008 +++ php-src/main/php_ini.c Tue Apr 15 11:31:58 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.c,v 1.136.2.4.2.15.2.7 2008/02/03 14:35:59 helly Exp $ */ +/* $Id: php_ini.c,v 1.136.2.4.2.15.2.8 2008/04/15 11:31:58 dmitry Exp $ */ #include "php.h" #include "ext/standard/info.h" @@ -50,6 +50,8 @@ static int is_special_section = 0; static HashTable *active_ini_hash; static HashTable configuration_hash; +static int has_per_dir_config = 0; +static int has_per_host_config = 0; PHPAPI char *php_ini_opened_path=NULL; static php_extension_lists extension_lists; PHPAPI char *php_ini_scanned_files=NULL; @@ -264,6 +266,7 @@ key = key + sizeof("PATH") - 1; key_len = Z_STRLEN_P(arg1) - sizeof("PATH") + 1; is_special_section = 1; + has_per_dir_config = 1; /* HOST sections */ } else if (!strncasecmp(Z_STRVAL_P(arg1), "HOST", sizeof("HOST") - 1)) { @@ -271,6 +274,8 @@ key = key + sizeof("HOST") - 1; key_len = Z_STRLEN_P(arg1) - sizeof("HOST") + 1; is_special_section = 1; + has_per_host_config = 1; + } else { is_special_section = 0; } @@ -737,6 +742,14 @@ } /* }}} */ +/* {{{ php_ini_has_per_dir_config + */ +PHPAPI int php_ini_has_per_dir_config(void) +{ + return has_per_dir_config; +} +/* }}} */ + /* {{{ php_ini_activate_per_dir_config */ PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC) @@ -745,7 +758,7 @@ char *ptr; /* Walk through each directory in path and apply any found per-dir-system-configuration from configuration_hash */ - if (path && path_len) { + if (has_per_dir_config && path && path_len) { ptr = path + 1; while ((ptr = strchr(ptr, DEFAULT_SLASH)) != NULL) { *ptr = 0; @@ -760,13 +773,21 @@ } /* }}} */ +/* {{{ php_ini_has_per_host_config + */ +PHPAPI int php_ini_has_per_host_config(void) +{ + return has_per_host_config; +} +/* }}} */ + /* {{{ php_ini_activate_per_host_config */ PHPAPI void php_ini_activate_per_host_config(char *host, uint host_len TSRMLS_DC) { zval *tmp; - if (host && host_len) { + if (has_per_host_config && host && host_len) { /* Search for source array matching the host from configuration_hash */ if (zend_hash_find(&configuration_hash, host, host_len, (void **) &tmp) == SUCCESS) { php_ini_activate_config(Z_ARRVAL_P(tmp), PHP_INI_SYSTEM, PHP_INI_STAGE_ACTIVATE TSRMLS_CC); http://cvs.php.net/viewvc.cgi/php-src/main/php_ini.h?r1=1.45.2.3.2.3.2.6&r2=1.45.2.3.2.3.2.7&diff_format=u Index: php-src/main/php_ini.h diff -u php-src/main/php_ini.h:1.45.2.3.2.3.2.6 php-src/main/php_ini.h:1.45.2.3.2.3.2.7 --- php-src/main/php_ini.h:1.45.2.3.2.3.2.6 Sun Feb 3 14:48:38 2008 +++ php-src/main/php_ini.h Tue Apr 15 11:31:58 2008 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_ini.h,v 1.45.2.3.2.3.2.6 2008/02/03 14:48:38 helly Exp $ */ +/* $Id: php_ini.h,v 1.45.2.3.2.3.2.7 2008/04/15 11:31:58 dmitry Exp $ */ #ifndef PHP_INI_H #define PHP_INI_H @@ -34,6 +34,8 @@ PHPAPI int cfg_get_string(char *varname, char **result); PHPAPI int php_parse_user_ini_file(char *dirname, char *ini_filename, HashTable *target_hash TSRMLS_DC); PHPAPI void php_ini_activate_config(HashTable *source_hash, int modify_type, int stage TSRMLS_DC); +PHPAPI int php_ini_has_per_dir_config(void); +PHPAPI int php_ini_has_per_host_config(void); PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC); PHPAPI void php_ini_activate_per_host_config(char *host, uint host_len TSRMLS_DC); PHPAPI HashTable* php_ini_get_configuration_hash(void); http://cvs.php.net/viewvc.cgi/php-src/sapi/cgi/cgi_main.c?r1=1.267.2.15.2.50.2.17&r2=1.267.2.15.2.50.2.18&diff_format=u Index: php-src/sapi/cgi/cgi_main.c diff -u php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.50.2.17 php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.50.2.18 --- php-src/sapi/cgi/cgi_main.c:1.267.2.15.2.50.2.17 Wed Apr 9 09:16:51 2008 +++ php-src/sapi/cgi/cgi_main.c Tue Apr 15 11:31:58 2008 @@ -21,7 +21,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: cgi_main.c,v 1.267.2.15.2.50.2.17 2008/04/09 09:16:51 dmitry Exp $ */ +/* $Id: cgi_main.c,v 1.267.2.15.2.50.2.18 2008/04/15 11:31:58 dmitry Exp $ */ #include "php.h" #include "php_globals.h" @@ -710,42 +710,47 @@ return FAILURE; } - doc_root = sapi_cgibin_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT") - 1 TSRMLS_CC); - server_name = sapi_cgibin_getenv("SERVER_NAME", sizeof("SERVER_NAME") - 1 TSRMLS_CC); - - /* DOCUMENT_ROOT and SERVER_NAME should also be defined at this stage..but better check it anyway */ - if (!doc_root || !server_name) { - return FAILURE; - } - doc_root_len = strlen(doc_root); - if (doc_root[doc_root_len - 1] == '/') { - --doc_root_len; + if (php_ini_has_per_host_config()) { + /* Activate per-host-system-configuration defined in php.ini and stored into configuration_hash during startup */ + server_name = sapi_cgibin_getenv("SERVER_NAME", sizeof("SERVER_NAME") - 1 TSRMLS_CC); + /* SERVER_NAME should also be defined at this stage..but better check it anyway */ + if (server_name) { + php_ini_activate_per_host_config(server_name, strlen(server_name) + 1 TSRMLS_CC); + } } - /* Prepare search path */ - path_len = strlen(SG(request_info).path_translated); - path = zend_strndup(SG(request_info).path_translated, path_len); - php_dirname(path, path_len); - path_len = strlen(path); + if (php_ini_has_per_dir_config() || + (PG(user_ini_filename) && *PG(user_ini_filename))) { + /* Prepare search path */ + path_len = strlen(SG(request_info).path_translated); + path = estrndup(SG(request_info).path_translated, path_len); + path_len = zend_dirname(path, path_len); - /* Make sure we have trailing slash! */ - if (!IS_SLASH(path[path_len])) { - path[path_len++] = DEFAULT_SLASH; - } - path[path_len] = 0; + /* Make sure we have trailing slash! */ + if (!IS_SLASH(path[path_len])) { + path[path_len++] = DEFAULT_SLASH; + } + path[path_len] = 0; - /* Activate per-dir-system-configuration defined in php.ini and stored into configuration_hash during startup */ - php_ini_activate_per_dir_config(path, path_len TSRMLS_CC); /* Note: for global settings sake we check from root to path */ + /* Activate per-dir-system-configuration defined in php.ini and stored into configuration_hash during startup */ + php_ini_activate_per_dir_config(path, path_len TSRMLS_CC); /* Note: for global settings sake we check from root to path */ - /* Activate per-host-system-configuration defined in php.ini and stored into configuration_hash during startup */ - php_ini_activate_per_host_config(server_name, strlen(server_name) + 1 TSRMLS_CC); + /* Load and activate user ini files in path starting from DOCUMENT_ROOT */ + if (PG(user_ini_filename) && *PG(user_ini_filename)) { + doc_root = sapi_cgibin_getenv("DOCUMENT_ROOT", sizeof("DOCUMENT_ROOT") - 1 TSRMLS_CC); + /* DOCUMENT_ROOT should also be defined at this stage..but better check it anyway */ + if (doc_root) { + doc_root_len = strlen(doc_root); + if (doc_root[doc_root_len - 1] == '/') { + --doc_root_len; + } + php_cgi_ini_activate_user_config(path, path_len, doc_root_len - 1 TSRMLS_CC); + } + } - /* Load and activate user ini files in path starting from DOCUMENT_ROOT */ - if (strlen(PG(user_ini_filename))) { - php_cgi_ini_activate_user_config(path, path_len, doc_root_len - 1 TSRMLS_CC); + efree(path); } - free(path); return SUCCESS; }
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php