Hello all, I cooked up a patch that gives PHP support for per-directory php.ini files that properly inherit. This makes php.ini files act a little like .htaccess files. We are cognizant of the associated performance issues, and thus this is a strictly optional feature.
For a little history, the current, common approach is to set PHPRC to be the current directory, so that a php.ini file from that directory is read. This unfortunately also overloads the global php.ini file, has an odd ordering with respect to php.d, and means that you have to place a php.ini file/symlink in every directory where PHP scripts could be run. While the patch is no where near where I would be comfortable formally submitting it for review on internals, I'd like to gauge how friendly the core PHP developers would be to an enhancement like this. In a nutshell, here is how the patch works: In php_ini.c, php_init_config() is patched to call php_user_init_config() if user directory php.ini's are accepted. The function then: 1. Retrieves the current working directory 2. Checks if the cwd is inside the user's home directory 3. Successively walks up from the user's home directory to the cwd, checking if a php.ini exists and loading it with zend_parse_ini_file if it does. We also have two special cases of behavior that we found helpful for our use-case: * We serve only a user's ~/web_scripts directory, so perform an optional check to make sure the PHP file is in the right place, and to not attempt to load ~/php.ini * If we had Apache frob $HOME such that it points to a "different" home directory, which is the web serve directory, skip the previous check. To get an idea for its behaviors, take the following example: /etc/php.ini foo = 1 bar = 1 /mit/user/web_scripts/wiki/php.ini foo = 2 Then, we see the following behavior for the following PHP scripts /mit/user/web_scripts/test.php foo = 1 bar = 1 /mit/user/web_scripts/wiki/test.php foo = 2 bar = 1 /mit/user/web_scripts/wiki/subdir/test.php foo = 2 bar = 1 I am looking forward to your comments, and I can post the very rough (but functional) patch if you are so interested. Cheers, Edward -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php