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