diff options
author | Jani Taskinen <jani@php.net> | 2008-08-13 00:53:28 +0000 |
---|---|---|
committer | Jani Taskinen <jani@php.net> | 2008-08-13 00:53:28 +0000 |
commit | e5e6f553a25f972500b792170e03b5903ee924dd (patch) | |
tree | 4064bc661598ee9214a8517543b249c8d4d0dca0 /main/php_ini.c | |
parent | f87d4530c299167f04a4d2cc076edb2432be3280 (diff) | |
download | php-git-e5e6f553a25f972500b792170e03b5903ee924dd.tar.gz |
MFH
Diffstat (limited to 'main/php_ini.c')
-rw-r--r-- | main/php_ini.c | 44 |
1 files changed, 35 insertions, 9 deletions
diff --git a/main/php_ini.c b/main/php_ini.c index 6affa2c7d1..b6db472d1f 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -54,6 +54,7 @@ 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_path=NULL; PHPAPI char *php_ini_scanned_files=NULL; /* {{{ php_ini_displayer_cb @@ -520,9 +521,18 @@ int php_init_config(TSRMLS_D) PG(safe_mode) = 0; PG(open_basedir) = NULL; + /* + * Find and open actual ini file + */ + memset(&fh, 0, sizeof(fh)); - /* Check if php_ini_path_override is a file */ - if (!sapi_module.php_ini_ignore) { + + /* If SAPI does not want to ignore all ini files OR an overriding file/path is given. + * This allows disabling scanning for ini files in the PHP_CONFIG_FILE_SCAN_DIR but still + * load an optional ini file. */ + if (!sapi_module.php_ini_ignore || sapi_module.php_ini_path_override) { + + /* Check if php_ini_file_name is a file and can be opened */ if (php_ini_file_name && php_ini_file_name[0]) { struct stat statbuf; @@ -535,7 +545,8 @@ int php_init_config(TSRMLS_D) } } } - /* Search php-%sapi-module-name%.ini file in search path */ + + /* Otherwise search for php-%sapi-module-name%.ini file in search path */ if (!fh.handle.fp) { const char *fmt = "php-%s.ini"; char *ini_fname; @@ -546,7 +557,8 @@ int php_init_config(TSRMLS_D) fh.filename = php_ini_opened_path; } } - /* Search php.ini file in search path */ + + /* If still no ini file found, search for php.ini file in search path */ if (!fh.handle.fp) { fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC); if (fh.handle.fp) { @@ -584,9 +596,16 @@ int php_init_config(TSRMLS_D) } } - /* If the config_file_scan_dir is set at compile-time, go and scan this directory and - * parse any .ini files found in this directory. */ - if (!sapi_module.php_ini_ignore && strlen(PHP_CONFIG_FILE_SCAN_DIR)) { + /* Check for PHP_INI_SCAN_DIR environment variable to override/set config file scan directory */ + php_ini_scanned_path = getenv("PHP_INI_SCAN_DIR"); + if (!php_ini_scanned_path) { + /* Or fall back using possible --with-config-file-scan-dir setting (defaults to empty string!) */ + php_ini_scanned_path = PHP_CONFIG_FILE_SCAN_DIR; + } + int php_ini_scanned_path_len = strlen(php_ini_scanned_path); + + /* Scan and parse any .ini files found in scan path if path not empty. */ + if (!sapi_module.php_ini_ignore && php_ini_scanned_path_len) { struct dirent **namelist; int ndir, i; struct stat sb; @@ -600,7 +619,7 @@ int php_init_config(TSRMLS_D) /* Reset active ini section */ RESET_ACTIVE_INI_HASH(); - if ((ndir = php_scandir(PHP_CONFIG_FILE_SCAN_DIR, &namelist, 0, php_alphasort)) > 0) { + if ((ndir = php_scandir(php_ini_scanned_path, &namelist, 0, php_alphasort)) > 0) { zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1); memset(&fh, 0, sizeof(fh)); @@ -611,7 +630,11 @@ int php_init_config(TSRMLS_D) free(namelist[i]); continue; } - snprintf(ini_file, MAXPATHLEN, "%s%c%s", PHP_CONFIG_FILE_SCAN_DIR, DEFAULT_SLASH, namelist[i]->d_name); + if (IS_SLASH(php_ini_scanned_path[php_ini_scanned_path_len - 1])) { + snprintf(ini_file, MAXPATHLEN, "%s%s", php_ini_scanned_path, namelist[i]->d_name); + } else { + snprintf(ini_file, MAXPATHLEN, "%s%c%s", php_ini_scanned_path, DEFAULT_SLASH, namelist[i]->d_name); + } if (VCWD_STAT(ini_file, &sb) == 0) { if (S_ISREG(sb.st_mode)) { if ((fh.handle.fp = VCWD_FOPEN(ini_file, "r"))) { @@ -649,6 +672,9 @@ int php_init_config(TSRMLS_D) } zend_llist_destroy(&scanned_ini_list); } + } else { + /* Make sure an empty php_ini_scanned_path ends up as NULL */ + php_ini_scanned_path = NULL; } if (sapi_module.ini_entries) { |