CakeFest 2024: The Official CakePHP Conference

Как изменить настройки конфигурации

Запуск PHP в качестве модуля Apache

Когда 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

При использовании 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

Независимо от того, как вы запускаете PHP, вы можете изменять некоторые значения во время выполнения ваших скриптов c помощью ini_set(). Для более детальной информации смотрите документацию на странице функции ini_set().

Если вам интересен полный список конфигурационных настроек вашей системы с текущими значениями, то вы можете запустить функцию phpinfo() и просмотреть результирующую страницу. Вы также можете получить доступ к значениям индивидуально сконфигурированных директив в процессе выполнения, используя ini_get() или get_cfg_var().

add a note

User Contributed Notes 2 notes

up
10
contrees.du.reve at gmail dot com
16 years ago
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...
up
-33
self at pabloviquez dot com
14 years ago
Note that, changing the PHP configuration via the windows registry will set the new values using php_admin_value. This makes that you cannot override them on runtime.

So for example, if you set the include_path on the windows registry and then you call the set_include_path function in your application, it will return false and won't change the include_path.
To Top