1 --- php-7.0/main/php_ini.c~ 2015-05-21 22:56:59.000000000 +0300
2 +++ php-7.0/main/php_ini.c 2015-05-21 23:01:21.580419532 +0300
7 +static int php_csort(const struct dirent **a, const struct dirent **b)
9 + return strcmp((*a)->d_name,(*b)->d_name);
12 /* {{{ php_init_config
14 int php_init_config(void)
16 char *php_ini_file_name = NULL;
17 char *php_ini_search_path = NULL;
18 + // value for php_ini_loaded_file() to be stored into php_ini_opened_path
19 + char *php_ini_loaded_file = NULL;
20 int php_ini_scanned_path_len;
22 int free_ini_search_path = 0;
27 + /* Search (global) php.ini file in search path */
28 + if (!fh.handle.fp) {
29 + fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &php_ini_opened_path TSRMLS_CC);
31 + fh.filename = php_ini_opened_path;
33 + // parse the ini file now
34 + PG(open_basedir) = open_basedir;
35 + fh.type = ZEND_HANDLE_FP;
36 + zend_parse_ini_file(&fh, 1, ZEND_INI_SCANNER_NORMAL, (zend_ini_parser_cb_t) php_ini_parser_cb, &configuration_hash TSRMLS_CC);
37 + open_basedir = PG(open_basedir);
38 + PG(open_basedir) = NULL;
39 + fh.handle.fp = NULL;
41 - /* Otherwise search for php-%sapi-module-name%.ini file in search path */
42 + // save this for later
43 + php_ini_loaded_file = estrdup(php_ini_opened_path);
45 + efree(php_ini_opened_path);
46 + fh.filename = php_ini_opened_path = NULL;
50 + /* Also search for php-%sapi-module-name%.ini file in search path */
52 const char *fmt = "php-%s.ini";
56 fh.filename = opened_path->val;
60 - /* If still no ini file found, search for php.ini file in search path */
61 - if (!fh.handle.fp) {
62 - fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_search_path, &opened_path);
64 - fh.filename = opened_path->val;
67 + // restore previous value, so php_ini_loaded_file() works as expected
68 + if (php_ini_loaded_file) {
69 + php_ini_opened_path = php_ini_loaded_file;
74 if (free_ini_search_path) {
79 + // use main php.ini if loaded
80 + if (php_ini_loaded_file) {
81 + fh.filename = php_ini_loaded_file;
84 Z_STRLEN(tmp) = strlen(fh.filename);
85 Z_STRVAL(tmp) = zend_strndup(fh.filename, Z_STRLEN(tmp));
87 zend_llist scanned_ini_list;
88 zend_llist_element *element;
90 + const char *fmt = "%s:" PHP_CONFIG_FILE_PATH "/%s.d";
91 char *bufpath, *debpath, *endpath;
94 zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
95 memset(&fh2, 0, sizeof(fh2));
97 - bufpath = estrdup(php_ini_scanned_path);
98 + bufpath = emalloc(strlen(php_ini_scanned_path) + strlen(fmt) + strlen(sapi_module.name));
99 + sprintf(bufpath, fmt, php_ini_scanned_path, sapi_module.name);
100 for (debpath = bufpath ; debpath ; debpath=endpath) {
101 endpath = strchr(debpath, DEFAULT_DIR_SEPARATOR);
105 lenpath = strlen(debpath);
107 - if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_alphasort)) > 0) {
108 + if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_csort)) > 0) {
110 for (i = 0; i < ndir; i++) {