-to test which is main php.ini:
+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-<sapi>.ini; if exists treat as main php.ini
+2. load php.ini if php-<sapi>.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 <sapi>.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
---- php-7.0.0RC6.orig/main/php_ini.c 2015-11-10 23:58:52.227101032 +0200
-+++ php-7.0.0RC6/main/php_ini.c 2015-11-11 00:01:43.502674750 +0200
-@@ -375,12 +375,19 @@
- }
+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)
/* {{{ php_init_config
*/
int php_init_config(void)
- {
- char *php_ini_file_name = NULL;
- char *php_ini_search_path = NULL;
-+ // value for php_ini_loaded_file() to be stored into php_ini_opened_path
-+ char *php_ini_loaded_file = NULL;
- int php_ini_scanned_path_len;
- char *open_basedir;
- int free_ini_search_path = 0;
-@@ -557,8 +564,26 @@
- }
- }
- }
-+ /* Search (global) php.ini file in search path */
-+ if (!fh.handle.fp) {
-+ fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &opened_path);
-+ if (fh.handle.fp) {
-+ fh.filename = ZSTR_VAL(opened_path);
-+
-+ // parse the ini file now
-+ PG(open_basedir) = open_basedir;
-+ fh.type = ZEND_HANDLE_FP;
-+ zend_parse_ini_file(&fh, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC);
-+ open_basedir = PG(open_basedir);
-+ PG(open_basedir) = NULL;
-+ fh.handle.fp = NULL;
-+
-+ php_ini_loaded_file = estrdup(fh.filename);
-+ fh.filename = NULL;
-+ }
-+ }
-
-- /* Otherwise search for php-%sapi-module-name%.ini file in search path */
-+ /* Also search for php-%sapi-module-name%.ini file in search path */
- if (!fh.handle.fp) {
- const char *fmt = "php-%s.ini";
- char *ini_fname;
-@@ -568,15 +593,8 @@
- if (fh.handle.fp) {
- fh.filename = ZSTR_VAL(opened_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, &opened_path);
-- if (fh.handle.fp) {
-- fh.filename = ZSTR_VAL(opened_path);
-- }
-- }
-+ }
- }
-
- if (free_ini_search_path) {
-@@ -593,14 +611,28 @@
-
- {
- zval tmp;
-+ // use main php.ini if loaded
-+ // see https://github.com/pld-linux/php/commit/762ec2e
-+ // test with:
-+ // php -r 'var_dump(array(get_cfg_var("cfg_file_path"),php_ini_loaded_file()));'
-+ if (php_ini_loaded_file) {
-+ if (fh.filename) {
-+ efree((char *)fh.filename);
-+ }
-+ fh.filename = php_ini_loaded_file;
-+ }
-
- ZVAL_NEW_STR(&tmp, zend_string_init(fh.filename, strlen(fh.filename), 1));
- zend_hash_str_update(&configuration_hash, "cfg_file_path", sizeof("cfg_file_path")-1, &tmp);
- if (opened_path) {
- zend_string_release(opened_path);
-- } else {
-+ }
-+
-+ if (fh.filename) {
- efree((char *)fh.filename);
-+ fh.filename = NULL;
- }
-+
- php_ini_opened_path = zend_strndup(Z_STRVAL(tmp), Z_STRLEN(tmp));
- }
- }
-@@ -624,13 +656,15 @@
+@@ -661,12 +666,14 @@ int php_init_config(void)
zend_llist scanned_ini_list;
zend_llist_element *element;
int l, total_l = 0;
int lenpath;
zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
- memset(&fh2, 0, sizeof(fh2));
- bufpath = estrdup(php_ini_scanned_path);
+ bufpath = emalloc(strlen(php_ini_scanned_path) + strlen(fmt) + strlen(sapi_module.name));
for (debpath = bufpath ; debpath ; debpath=endpath) {
endpath = strchr(debpath, DEFAULT_DIR_SEPARATOR);
if (endpath) {
-@@ -643,7 +677,7 @@
+@@ -679,7 +686,7 @@ int php_init_config(void)
}
lenpath = (int)strlen(debpath);