if (module) {
module_number = module->module_number;
- } else {
+ } else {
module_number = 0;
}
php_info_print_table_start();
#ifdef ZTS
# if (ZEND_DEBUG)
-# define ZEND_EXTENSION_TOKEN "zend_extension_debug_ts"
+# define ZEND_EXTENSION_TOKEN "zend_extension_debug_ts"
# else
-# define ZEND_EXTENSION_TOKEN "zend_extension_ts"
+# define ZEND_EXTENSION_TOKEN "zend_extension_ts"
# endif
#else
# if (ZEND_DEBUG)
-# define ZEND_EXTENSION_TOKEN "zend_extension_debug"
+# define ZEND_EXTENSION_TOKEN "zend_extension_debug"
# else
-# define ZEND_EXTENSION_TOKEN "zend_extension"
+# define ZEND_EXTENSION_TOKEN "zend_extension"
# endif
#endif
/* {{{ pvalue_config_destructor
*/
static void pvalue_config_destructor(zval *pvalue)
-{
- if (Z_TYPE_P(pvalue) == IS_STRING && Z_STRVAL_P(pvalue) != empty_string) {
- free(Z_STRVAL_P(pvalue));
- }
+{
+ if (Z_TYPE_P(pvalue) == IS_STRING && Z_STRVAL_P(pvalue) != empty_string) {
+ free(Z_STRVAL_P(pvalue));
+ }
}
/* }}} */
}
if (!strcasecmp(Z_STRVAL_P(arg1), "extension")) { /* load function module */
zval copy;
-
+
copy = *arg2;
zval_copy_ctor(©);
copy.refcount = 0;
- zend_llist_add_element(&extension_lists.functions, ©);
+ zend_llist_add_element(&extension_lists.functions, ©);
} else if (!strcasecmp(Z_STRVAL_P(arg1), ZEND_EXTENSION_TOKEN)) { /* load Zend extension */
char *extension_name = estrndup(Z_STRVAL_P(arg2), Z_STRLEN_P(arg2));
-
+
zend_llist_add_element(&extension_lists.engine, &extension_name);
} else {
zend_hash_update(&configuration_hash, Z_STRVAL_P(arg1), Z_STRLEN_P(arg1)+1, arg2, sizeof(zval), (void **) &entry);
*/
int php_init_config(char *php_ini_path_override)
{
- char *env_location, *php_ini_search_path;
int safe_mode_state;
char *open_basedir;
- int free_ini_search_path=0;
zend_file_handle fh;
TSRMLS_FETCH();
zend_llist_init(&extension_lists.engine, sizeof(char *), (llist_dtor_func_t) free_estring, 1);
zend_llist_init(&extension_lists.functions, sizeof(zval), (llist_dtor_func_t) ZVAL_DESTRUCTOR, 1);
-
+
safe_mode_state = PG(safe_mode);
open_basedir = PG(open_basedir);
+ PG(safe_mode) = 0;
+ PG(open_basedir) = NULL;
- env_location = getenv("PHPRC");
- if (!env_location) {
- env_location="";
- }
- if (php_ini_path_override) {
- php_ini_search_path = php_ini_path_override;
- free_ini_search_path = 0;
- } else {
- char *default_location;
- int free_default_location;
+ fh.handle.fp = NULL;
-#ifdef PHP_WIN32
- default_location = (char *) emalloc(512);
-
- if (!GetWindowsDirectory(default_location, 255)) {
- default_location[0]=0;
- }
- free_default_location=1;
-#else
- default_location = PHP_CONFIG_FILE_PATH;
- free_default_location=0;
-#endif
- php_ini_search_path = (char *) emalloc(sizeof(".")+strlen(env_location)+strlen(default_location)+2+1);
- free_ini_search_path = 1;
- if (strcmp(sapi_module.name, "cli")==0) {
- if(env_location && env_location[0]) {
- sprintf(php_ini_search_path, "%s%c%s", env_location, ZEND_PATHS_SEPARATOR, default_location);
- } else {
- sprintf(php_ini_search_path, "%s", default_location);
- }
- } else {
- if(env_location && env_location[0]) {
- sprintf(php_ini_search_path, ".%c%s%c%s", ZEND_PATHS_SEPARATOR, env_location, ZEND_PATHS_SEPARATOR, default_location);
- } else {
- sprintf(php_ini_search_path, ".%c%s", ZEND_PATHS_SEPARATOR, default_location);
+ /* If no override given (usually from the command line) then check the environment. */
+ if (!php_ini_path_override) {
+ php_ini_path_override = getenv("PHPRC");
+ }
+ if (php_ini_path_override && *php_ini_path_override) {
+
+ /* Try to open php_ini_path_override if not a directory. */
+ struct stat st;
+ if ((0 == VCWD_STAT(php_ini_path_override, &st)) && (S_IFDIR != (st.st_mode & S_IFMT))) {
+ fh.handle.fp = VCWD_FOPEN(php_ini_path_override, "r");
+ if (fh.handle.fp) {
+ php_ini_opened_path = estrdup(php_ini_path_override);
}
}
- if (free_default_location) {
- efree(default_location);
+
+ /* If we did not manage to open php_ini_path_override then search it as a directory. */
+ if (!fh.handle.fp) {
+ fh.handle.fp = php_fopen_with_path("php.ini", "r", php_ini_path_override, &php_ini_opened_path TSRMLS_CC);
}
+
}
- PG(safe_mode) = 0;
- PG(open_basedir) = NULL;
+#define INI_CHECK_CWD
+#ifdef INI_CHECK_CWD
+ if (!fh.handle.fp && (0 != strcmp(sapi_module.name, "cli"))) {
+ /* Search the current directory - possible security risk? */
+ fh.handle.fp = php_fopen_with_path("php.ini", "r", ".", &php_ini_opened_path TSRMLS_CC);
+ }
+#endif
- fh.handle.fp = NULL;
- /* Check if php_ini_path_override is a file */
- if (php_ini_path_override && php_ini_path_override[0]) {
- struct stat statbuf;
- if (!VCWD_STAT(php_ini_path_override, &statbuf)) {
- if (!((statbuf.st_mode & S_IFMT) == S_IFDIR)) {
- fh.handle.fp = VCWD_FOPEN(php_ini_path_override, "r");
- }
+#ifdef PHP_WIN32
+ if (!fh.handle.fp) {
+ /* Search for php.ini in the same directory as the executable. */
+ char search_path[MAX_PATH];
+ if (GetModuleFileName(0,search_path,sizeof(search_path))) {
+ char* p = strrchr(search_path,'\\');
+ if (p) *++p = 0;
+ fh.handle.fp = php_fopen_with_path("php.ini", "r", search_path, &php_ini_opened_path TSRMLS_CC);
}
}
- /* Search 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 (free_ini_search_path) {
- efree(php_ini_search_path);
+ if (!fh.handle.fp) {
+ /* Search for php.ini in the Windows base directory. */
+ char search_path[MAX_PATH];
+ if (GetWindowsDirectory(search_path,sizeof(search_path))) {
+ fh.handle.fp = php_fopen_with_path("php.ini", "r", search_path, &php_ini_opened_path TSRMLS_CC);
+ }
}
+#else
+ if (!fh.handle.fp) {
+ /* Search for php.ini in the (platform-specific) default places. */
+ fh.handle.fp = php_fopen_with_path("php.ini", "r", PHP_CONFIG_FILE_PATH, &php_ini_opened_path TSRMLS_CC);
+ }
+#endif
+
PG(safe_mode) = safe_mode_state;
PG(open_basedir) = open_basedir;
fh.filename = php_ini_opened_path;
zend_parse_ini_file(&fh, 1, php_config_ini_parser_cb, &extension_lists);
-
+
+ /* If we succeeded in opening an INI file, preserve the name of the file opened. */
if (php_ini_opened_path) {
zval tmp;
-
+
Z_STRLEN(tmp) = strlen(php_ini_opened_path);
Z_STRVAL(tmp) = zend_strndup(php_ini_opened_path, Z_STRLEN(tmp));
Z_TYPE(tmp) = IS_STRING;
efree(php_ini_opened_path);
php_ini_opened_path = zend_strndup(Z_STRVAL(tmp), Z_STRLEN(tmp));
}
-
+
return SUCCESS;
}
/* }}} */
PHPAPI int cfg_get_long(char *varname, long *result)
{
zval *tmp, var;
-
+
if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) {
*result=(long)NULL;
return FAILURE;
PHPAPI int cfg_get_double(char *varname, double *result)
{
zval *tmp, var;
-
+
if (zend_hash_find(&configuration_hash, varname, strlen(varname)+1, (void **) &tmp)==FAILURE) {
*result=(double)0;
return FAILURE;