The ini loading order is in PLD (as of 7.4.0beta2): - openat(AT_FDCWD, "/etc/php74/php-cli.ini", O_RDONLY) = -1 ENOENT (No such file or directory) - openat(AT_FDCWD, "/etc/php74/php.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d/00_curl.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d/00_json.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d/00_opcache.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d/00_xml.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d/opcache.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/conf.d/timezone.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/cli.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_CLOEXEC|O_DIRECTORY) = 4 - openat(AT_FDCWD, "/etc/php74/cli.d/00_readline.ini", O_RDONLY) = 4 - openat(AT_FDCWD, "/etc/php74/cli.d/php.ini", O_RDONLY) = 4 1. load php-.ini; if exists treat as main php.ini 2. load php.ini if php-.ini was not found 3. load conf.d/DD_*.ini to load extra extension and zend_extension lines 4. load conf.d/*.ini to load extra ini settings not involving loading extension 5. load .d same way as conf.d This allows minimal patch, but still allowing to have main php ini and sapi specific overrides To test which is main php.ini: $ php -r 'var_dump(array(get_cfg_var("cfg_file_path"),php_ini_loaded_file()));' https://github.com/pld-linux/php/commit/762ec2e diff --git a/main/php_ini.c b/main/php_ini.c index d508c13b50..2cf28eb7f5 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -410,6 +410,11 @@ static void php_load_zend_extension_cb(void *arg) { } #endif /* }}} */ +static int php_csort(const struct dirent **a, const struct dirent **b) +{ + return strcmp((*a)->d_name,(*b)->d_name); +} + /* {{{ php_init_config */ int php_init_config(void) @@ -661,12 +666,14 @@ int php_init_config(void) zend_llist scanned_ini_list; zend_llist_element *element; int l, total_l = 0; + const char *fmt = "%s:" PHP_CONFIG_FILE_PATH "/%s.d"; char *bufpath, *debpath, *endpath; int lenpath; zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1); - bufpath = estrdup(php_ini_scanned_path); + bufpath = emalloc(strlen(php_ini_scanned_path) + strlen(fmt) + strlen(sapi_module.name)); + sprintf(bufpath, fmt, php_ini_scanned_path, sapi_module.name); for (debpath = bufpath ; debpath ; debpath=endpath) { endpath = strchr(debpath, DEFAULT_DIR_SEPARATOR); if (endpath) { @@ -679,7 +686,7 @@ int php_init_config(void) } lenpath = (int)strlen(debpath); - if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_alphasort)) > 0) { + if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_csort)) > 0) { for (i = 0; i < ndir; i++) {