1 --- php-5.5.21/main/php_ini.c 2015-01-21 12:23:27.000000000 +0200
2 +++ php-5.5.21/main/php_ini.c 2015-02-25 01:40:21.335354971 +0200
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(TSRMLS_D)
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 = php_ini_opened_path;
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, &php_ini_opened_path TSRMLS_CC);
64 - fh.filename = php_ini_opened_path;
65 + // restore previous value, so php_ini_loaded_file() works as expected
66 + if (php_ini_loaded_file) {
67 + php_ini_opened_path = php_ini_loaded_file;
75 + // use main php.ini if loaded
76 + if (php_ini_loaded_file) {
77 + fh.filename = php_ini_loaded_file;
80 Z_STRLEN(tmp) = strlen(fh.filename);
81 Z_STRVAL(tmp) = zend_strndup(fh.filename, Z_STRLEN(tmp));
83 zend_llist scanned_ini_list;
84 zend_llist_element *element;
86 + const char *fmt = "%s:" PHP_CONFIG_FILE_PATH "/%s.d";
87 char *bufpath, *debpath, *endpath;
90 zend_llist_init(&scanned_ini_list, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
91 memset(&fh2, 0, sizeof(fh2));
93 - bufpath = estrdup(php_ini_scanned_path);
94 + bufpath = emalloc(strlen(php_ini_scanned_path) + strlen(fmt) + strlen(sapi_module.name));
95 + sprintf(bufpath, fmt, php_ini_scanned_path, sapi_module.name);
96 for (debpath = bufpath ; debpath ; debpath=endpath) {
97 endpath = strchr(debpath, DEFAULT_DIR_SEPARATOR);
101 lenpath = strlen(debpath);
103 - if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_alphasort)) > 0) {
104 + if (lenpath > 0 && (ndir = php_scandir(debpath, &namelist, 0, php_csort)) > 0) {
106 for (i = 0; i < ndir; i++) {