summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@php.net>2008-04-15 11:31:58 +0000
committerDmitry Stogov <dmitry@php.net>2008-04-15 11:31:58 +0000
commitba8e3174ce4ee92cd3d391ec826cb44128474bba (patch)
tree103a725cc5e6e00ce8e6bdd51d11151595f6b318 /main
parent8401580c37f8a7d1b17dc7c24d7fba8af29cc0cc (diff)
downloadphp-git-ba8e3174ce4ee92cd3d391ec826cb44128474bba.tar.gz
Optimized request startup sequence for php.ini without per dir and per host configurations
Diffstat (limited to 'main')
-rw-r--r--main/php_ini.c25
-rw-r--r--main/php_ini.h2
2 files changed, 25 insertions, 2 deletions
diff --git a/main/php_ini.c b/main/php_ini.c
index 8a103a08a3..0c35e79ae2 100644
--- a/main/php_ini.c
+++ b/main/php_ini.c
@@ -50,6 +50,8 @@ typedef struct _php_extension_lists {
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 @@ static void php_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_t
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 @@ static void php_ini_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callback_t
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 @@ PHPAPI void php_ini_activate_config(HashTable *source_hash, int modify_type, int
}
/* }}} */
+/* {{{ 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 @@ PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC)
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 @@ PHPAPI void php_ini_activate_per_dir_config(char *path, uint path_len TSRMLS_DC)
}
/* }}} */
+/* {{{ 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);
diff --git a/main/php_ini.h b/main/php_ini.h
index 70f3bfca2f..61e87f6a48 100644
--- a/main/php_ini.h
+++ b/main/php_ini.h
@@ -34,6 +34,8 @@ PHPAPI int cfg_get_double(char *varname, double *result);
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);