Когда PHP работает как модуль Apache, настройки конфигурации изменяют через директивы в файлах конфигурации Apache (например, httpd.conf) и файлах .htaccess. Для этого потребуются привилегии «AllowOverride Options» или «AllowOverride All».
В Apache предусмотрели директивы, которые разрешают
изменить конфигурацию PHP в файлах конфигурации Apache.
Список директив INI_ALL , INI_PERDIR
и INI_SYSTEM смотрите в приложении
«Список директив php.ini».
php_value
name
value
Устанавливает значение директивы.
Разрешено указывать только с директивами
типа INI_ALL и INI_PERDIR .
Чтобы очистить ранее установленное значение,
в качестве значения указывают none.
Замечание: Не используйте директиву
php_valueдля установки логических значений. Эту функцию выполняет директиваphp_flag; её описание ниже.
php_flag
name
on|off
Устанавливает директивам логические значения.
Разрешено указывать только с директивами типа INI_ALL и
INI_PERDIR .
php_admin_value
name
value
Устанавливает значение директивы.
Нельзя указывать в файлах .htaccess.
Директивы любого типа, установленные через директиву
php_admin_value,
нельзя переопределять через файлы .htaccess или функцию ini_set() .
Чтобы очистить ранее установленное значение, указывают значение none.
php_admin_flag
name
on|off
Устанавливает директивам логические значения.
Нельзя указывать в файлах .htaccess.
Директивы любого типа, установленные через директиву
php_admin_flag,
нельзя переопределять через файлы .htaccess или функцию ini_set() .
Пример #1 Пример конфигурации Apache
<IfModule mod_php5.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on </IfModule> <IfModule mod_php4.c> php_value include_path ".:/usr/local/lib/php" php_admin_flag engine on </IfModule>
PHP-константы недоступны вне PHP. Например, в
httpd.conf вы не можете использовать константы PHP
такие как E_ALL или E_NOTICE ,
чтобы установить директиву error_reporting,
так как они не будут иметь значения и будут приравниваться к 0.
Используйте вместо этого соответствующие значения типа bitmask (битовая маска).
Эти константы могут быть использованы в php.ini
При использовании PHP в Windows значения конфигурации могут быть
изменены на уровне директории посредством реестра Windows.
Значения конфигурации хранятся в ключе реестра
HKLM\SOFTWARE\PHP\Per Directory Values,
в подключах, включающих полный путь. Например, значения конфигурации для директории
c:\inetpub\wwwroot могут храниться в ключе
HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot.
Настройки для директории будут действительны для любых скриптов, запущенных из
этой директории или её поддиректории. Значения ключа должны иметь название
конфигурационной директивы PHP и строковое значение.
PHP-константы в значениях игнорируются.
Однако только значения конфигурации, изменяемые в
INI_USER могут быть установлены таким образом,
значения же INI_PERDIR не могут,
потому что эти значения конфигурации перечитываются для каждого запроса.
Независимо от того, как вы запускаете PHP, вы можете изменять некоторые значения во время выполнения ваших скриптов c помощью ini_set() . Для более детальной информации смотрите документацию на странице функции ini_set() .
Если вам интересен полный список конфигурационных настроек вашей системы с текущими значениями, то вы можете запустить функцию phpinfo() и просмотреть результирующую страницу. Вы также можете получить доступ к значениям индивидуально сконфигурированных директив в процессе выполнения, используя ini_get() или get_cfg_var() .
Being able to put php directives in httpd.conf and have them work on a per-directory or per-vitual host basis is just great. Now there's another aspect which might be worth being aware of:
A php.ini directive put into your apache conf file applies to php when it runs as an apache module (i.e. in a web page), but NOT when it runs as CLI (command-line interface).
Such feature that might be unwanted by an unhappy few, but I guess most will find it useful. As far as I'm concerned, I'm really happy that I can use open_basedir in my httpd.conf file, and it restricts the access of web users and sub-admins of my domain, but it does NOT restrict my own command-line php scripts...If a directive has beeen set many times in different places, the precedence is as follows in descending order
php-fpm php_*[foo] = bar
command line argument -d foo=bar
environment variable foo=bar and referenced as ${foo} in php.ini
php.ini foo=bar