PHP : Installation and Configuration : Runtime Configuration
The configuration file (called php3.ini in
PHP 3, and simply php.ini as of PHP 4)
is read when PHP starts up. For the server module versions of PHP,
this happens only once when the web server is started. For the
CGI and CLI version, it happens on
every invocation.
php.ini is searched in these locations (in order):
SAPI module specific location (PHPIniDir directive
in Apache 2, -c command line option in CGI and CLI,
php_ini parameter in NSAPI,
PHP_INI_PATH environment variable in THTTPD)
The PHPRC environment variable. Before PHP 5.2.0
this was checked after the registry key mentioned below.
As of PHP 5.2.0, the following registry locations are searched in
order:
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z\IniFilePath ,
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y\IniFilePath and
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x\IniFilePath , where
x, y and z mean the PHP major, minor and release versions.
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath
(Windows Registry location)
Current working directory (except CLI)
The web server's directory (for SAPI modules), or directory of PHP
(otherwise in Windows)
Windows directory (C:\windows
or C:\winnt ) (for Windows), or
--with-config-file-path compile time option
If php-SAPI.ini exists (where SAPI is used SAPI, so the
filename is e.g. php-cli.ini or
php-apache.ini ), it's used instead of php.ini .
SAPI name can be determined by php_sapi_name().
Note:
The Apache web server changes the directory to root at startup causing
PHP to attempt to read php.ini from the root filesystem if it exists.
The php.ini directives handled by extensions are documented respectively
on the pages of the extensions themselves. The list of
the core directives is available in the appendix. Probably not all
PHP directives are documented in the manual though. For a complete list
of directives available in your PHP version, please read your well commented
php.ini file. Alternatively, you may find the
» the latest php.ini from CVS
helpful too.
Example 7.1. php.ini example
; any text on a line after an unquoted semicolon (;) is ignored
[php] ; section markers (text within square brackets) are also ignored
; Boolean values can be set to either:
; true, on, yes
; or false, off, no, none
register_globals = off
track_errors = yes
; you can enclose strings in double-quotes
include_path = ".:/usr/local/lib/php"
; backslashes are treated the same as any other character
include_path = ".;c:\php\lib"
Since PHP 5.1.0, it is possible to refer to existing .ini variables from
within .ini files. Example: open_basedir = ${open_basedir}
":/new/dir" .
cduke420
[ When php run as Apache Module ]
DOCUMENT_ROOT .htaccess
+======================================+
SetEnv PHPRC /home/user/dir-containing-phpinifile
+======================================+
[ When php run as CGI ]
Place your php.ini file in the dir of your cgi'd php binary, in this case /cgi-bin/
DOCUMENT_ROOT .htaccess
+======================================+
AddHandler php-cgi .php .htm
Action php-cgi /cgi-bin/php5.cgi
+======================================+
[ PHP run as cgi with wrapper (for FastCGI) ]
Your wrapper script should look something like:
+======================================+
#!/bin/sh
export PHP_FCGI_CHILDREN=3
exec /user/htdocs/cgi-bin/php.cgi -c /home/user/php.ini
+======================================+
original article: http://www.askapache.com/2007/php/custom-phpini-tips-and-tricks.html
trevor blackbird > yurab.com
You can use also use the predefined PHP_SAPI constant instead of php_sapi_name().
alonso
Setting php.ini location for PHP working as Apache module (without use SetEnv directive in httpd.conf):
Before start Apache, set the PHPRC environment variable to the path where php.ini should be loaded, for example:
PHPRC=/etc/php4/apache-another-path
export PHPRC
In Debian we can do this way:
In /etc/init.d/apache (the script that loads apache web server) we have this line:
ENV="env -i LANG=C PATH=/bin:/usr/bin:/usr/local/bin"
Set to this:
ENV="env -i LANG=C PATH=/bin:/usr/bin:/usr/local/bin PHPRC=/etc/php4/apache-another-path"
Then wen you reload apache the php.ini will be loaded in the directory configured in PHPRC environment variable.
gprochnow
Run php 4 and php 5.2.x on the same machine with IIS 6.0 as ISAPI.
1. Extract the ZIP packages of both php 4 & php 5 (not the Windows Installer) to c:\php4 & c:\php5 respectively
2. Setup the corresponding php.ini files in c:\php4 and c:\php5
3. Add the Web Service Extensions for php4 and php5. For php4 use c:\php4\sapi\php4isapi.dll, php5 use c:\php5\php5isapi.dll
4. Add the following registry keys:
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\5\IniFilePath -> c:\php5
HKEY_LOCAL_MACHINE\SOFTWARE\PHP\IniFilePath -> c:\php4
5. Add c:\php4 to the PATH environment variable.
6. Associate each web site in IIS with the corresponding php version.
7. Reboot
Note: That should work, test with phpinfo() in each site. You may need to refer to the php documentation if we missed any other settings.
henrick
In order to get PHP 5.2 stable running on Windows Server 2003 x64 (IIS 6.0), I discovered three things (in addition to the other comments above):
* Some PHP web applications make use of the SCRIPT_NAME server variable which is not available under CGI. You have to use php5isapi.dll, which is a 32 bit dll, so you have to run IIS in 32 bit mode. Confer http://support.microsoft.com/kb/894435. This applies to all ISAPI extensions and not just ASP.NET.
* It appears you must leave the doc_root entry in php.ini blank. At least, that is what finally made my installation work. (Note that others have suggested to set it to e.g. C:\inetpub\wwwroot or equivalent. That won't work if your server hosts more than one domain, each placed in a separate directory.)
* If you are e.g. using MySQL you will have to edit php.ini. In order for it to be found, you must set the PHPRC system environment variable or the registry entry. Note that if you edit the registry using regedit.exe, the PHP key should be placed under the [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node] key. This happens automatically if you set it using a 32 bit legacy application.
c dot affolter
For those people who want to use the PHPRC environment variable:
You have to specify the path to the directory containing your php.ini, not the direct path to the php.ini.
Example (php.ini resides in /your/path/php.ini):
right:
export PHPRC=/your/path
wrong:
export PHPRC=/your/path/php.ini
jorrit schippers
For IIS users: If you experience high parsetimes, try to set output_buffering to On. IIS has problems with scripts outputting many small pieces of text, and with output_buffering = On, PHP sends the whole page to IIS in one piece.
jaw
Be sure to use double quotes in the php.ini file. For instance:
(lines broken for readability)
this will work:
# xdebug debugging
zend_extension="/usr/local/php5/lib/php/extensions
/no-debug-non-zts-20060613/xdebug.so"
this won't:
# xdebug debugging
zend_extension='/usr/local/php5/lib/php/extensions
/no-debug-non-zts-20060613/xdebug.so'
You'll get this error:
Failed loading '/usr/local/php5/lib/php/extensions/
no-debug-non-zts-20060613/xdebug.so': (null)
So... double quotes are the way! I know this is obvious, but it's a good thing to remember for the php.ini file.
alvaro
About Apache 2.0 module:
For whatever reason, the Windows installer for PHP/5.2.3 tries to set the PHPIniDir directive using "\\" as directory separator:
PHPIniDir "C:\\Archivos de programa\\PHP\\"
It didn't work for me until I edited httpd.conf and replaced it with "/":
PHPIniDir "C:/Archivos de programa/PHP/"
randy
(copied from another page)
Please note that the SetEnv PHPRC "directory/to/phpini/" only works when using PHP as CGI, but _not_ when you use the PHP Apache Module!
|
|