mirror of
https://github.com/php/php-src.git
synced 2024-12-14 20:33:36 +08:00
[DOC]- Added methods to change/disable --with-config-file-scan-dir=PATH at
[DOC] startup: [DOC] [DOC] To disable: Override default php.ini by using both -c and -n with [DOC] CGI/CLI or set "PHP_INI_SCAN_DIR" environment variable [DOC] to an empty string. [DOC] [DOC] To change: Simply set "PHP_INI_SCAN_DIR" environment variable to point [DOC] to another path. - Fixed bug #42604 ("make test" fails with --with-config-file-scan-dir=/some/path) - Implemented FR #45114 (Option to change --with-config-file-scan-dir)
This commit is contained in:
parent
a99fad3b16
commit
bc6a9ad209
@ -87,16 +87,21 @@ test: all
|
||||
CC="$(CC)" \
|
||||
$(PHP_EXECUTABLE) $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -d extension_dir=modules/ $(PHP_TEST_SHARED_EXTENSIONS) tests/; \
|
||||
elif test ! -z "$(SAPI_CLI_PATH)" && test -x "$(SAPI_CLI_PATH)"; then \
|
||||
INI_FILE=`$(top_builddir)/$(SAPI_CLI_PATH) -r 'echo php_ini_loaded_file();'`; \
|
||||
INI_FILE=`$(top_builddir)/$(SAPI_CLI_PATH) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \
|
||||
if test "$$INI_FILE"; then \
|
||||
$(EGREP) -v '^(zend_)?extension(_debug)?(_ts)?[\t\ ]*=' "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \
|
||||
else \
|
||||
echo > $(top_builddir)/tmp-php.ini; \
|
||||
fi; \
|
||||
INI_SCANNED_PATH=`$(top_builddir)/$(SAPI_CLI_PATH) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \
|
||||
if test "$$INI_SCANNED_PATH"; then \
|
||||
INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \
|
||||
$(EGREP) -h -v '^(zend_)?extension(_debug)?(_ts)?[\t\ ]*=' "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \
|
||||
fi; \
|
||||
TEST_PHP_EXECUTABLE=$(top_builddir)/$(SAPI_CLI_PATH) \
|
||||
TEST_PHP_SRCDIR=$(top_srcdir) \
|
||||
CC="$(CC)" \
|
||||
$(top_builddir)/$(SAPI_CLI_PATH) $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \
|
||||
$(top_builddir)/$(SAPI_CLI_PATH) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \
|
||||
else \
|
||||
echo "ERROR: Cannot run tests without CLI sapi."; \
|
||||
fi
|
||||
|
@ -59,6 +59,7 @@ ZEND_EXTERN_MODULE_GLOBALS(iconv)
|
||||
} \
|
||||
|
||||
PHPAPI extern char *php_ini_opened_path;
|
||||
PHPAPI extern char *php_ini_scanned_path;
|
||||
PHPAPI extern char *php_ini_scanned_files;
|
||||
|
||||
static int php_info_print_html_esc(const char *str, int len) /* {{{ */
|
||||
@ -567,14 +568,9 @@ PHPAPI void php_print_info(int flag TSRMLS_DC)
|
||||
|
||||
php_info_print_table_row(2, "Configuration File (php.ini) Path", PHP_CONFIG_FILE_PATH);
|
||||
php_info_print_table_row(2, "Loaded Configuration File", php_ini_opened_path ? php_ini_opened_path : "(none)");
|
||||
php_info_print_table_row(2, "Scan this dir for additional .ini files", php_ini_scanned_path ? php_ini_scanned_path : "(none)");
|
||||
php_info_print_table_row(2, "additional .ini files parsed", php_ini_scanned_files ? php_ini_scanned_files : "(none)");
|
||||
|
||||
if (strlen(PHP_CONFIG_FILE_SCAN_DIR)) {
|
||||
php_info_print_table_row(2, "Scan this dir for additional .ini files", PHP_CONFIG_FILE_SCAN_DIR);
|
||||
if (php_ini_scanned_files) {
|
||||
php_info_print_table_row(2, "additional .ini files parsed", php_ini_scanned_files);
|
||||
}
|
||||
}
|
||||
|
||||
snprintf(temp_api, sizeof(temp_api), "%d", PHP_API_VERSION);
|
||||
php_info_print_table_row(2, "PHP API", temp_api);
|
||||
|
||||
|
@ -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
|
||||
@ -517,9 +518,18 @@ int php_init_config(TSRMLS_D)
|
||||
|
||||
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;
|
||||
|
||||
@ -532,7 +542,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;
|
||||
@ -543,7 +554,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) {
|
||||
@ -580,9 +592,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;
|
||||
@ -596,7 +615,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));
|
||||
|
||||
@ -607,7 +626,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"))) {
|
||||
@ -645,6 +668,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) {
|
||||
|
@ -1734,15 +1734,6 @@ consult the installation file that came with this distribution, or visit \n\
|
||||
CG(interactive) = 0;
|
||||
|
||||
if (!cgi && !fastcgi) {
|
||||
if (cgi_sapi_module.php_ini_path_override && cgi_sapi_module.php_ini_ignore) {
|
||||
no_headers = 1;
|
||||
SG(headers_sent) = 1;
|
||||
php_printf("You cannot use both -n and -c switch. Use -h for help.\n");
|
||||
php_output_end_all(TSRMLS_C);
|
||||
exit_status = 1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) {
|
||||
switch (c) {
|
||||
|
||||
|
@ -760,12 +760,6 @@ int main(int argc, char *argv[])
|
||||
CG(in_compilation) = 0; /* not initialized but needed for several options */
|
||||
EG(uninitialized_zval_ptr) = NULL;
|
||||
|
||||
if (cli_sapi_module.php_ini_path_override && cli_sapi_module.php_ini_ignore) {
|
||||
PUTS("You cannot use both -n and -c switch. Use -h for help.\n");
|
||||
exit_status=1;
|
||||
goto err;
|
||||
}
|
||||
|
||||
while ((c = php_getopt(argc, argv, OPTIONS, &php_optarg, &php_optind, 0, 2)) != -1) {
|
||||
switch (c) {
|
||||
|
||||
|
@ -18,6 +18,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#include "php.h"
|
||||
#include "php_globals.h"
|
||||
@ -1057,13 +1058,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
zend_uv.html_errors = 0; /* tell the engine we're in non-html mode */
|
||||
|
||||
if (milter_sapi_module.php_ini_path_override && milter_sapi_module.php_ini_ignore) {
|
||||
SG(headers_sent) = 1;
|
||||
SG(request_info).no_headers = 1;
|
||||
PUTS("You cannot use both -n and -c switch. Use -h for help.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
while ((c = ap_php_getopt(argc, argv, OPTSTRING)) != -1) {
|
||||
switch (c) {
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user