Php/profiles
Материал из ALT Linux Wiki
Ilis (обсуждение | вклад) (→Создание дополнительных профилей) |
Ilis (обсуждение | вклад) (→Создание дополнительных профилей) |
||
Строка 25: | Строка 25: | ||
Вы можете создавать свои собственные профили конфигурации. Для этих целей используется директория: <tt>/etc/php/<VERSION>/<SAPI>/control.d/</tt> | Вы можете создавать свои собственные профили конфигурации. Для этих целей используется директория: <tt>/etc/php/<VERSION>/<SAPI>/control.d/</tt> | ||
- | В этой директории находятся описания дополнительных профилей. Они могут находиться как в одном файле, так и в разных. Все что будет находится в этой директории будет использоваться. Поэтому в этой служебной директории не должно быть | + | В этой директории находятся описания дополнительных профилей. Они могут находиться как в одном файле, так и в разных. Все что будет находится в этой директории будет использоваться. Поэтому в этой служебной директории не должно быть посторонних файлов. |
- | Чтобы описать профиль используется функция | + | Чтобы описать профиль используется функция «php_rule». Формат у нее следующий: |
<tt>php_rule <MODE> <DIRECTIVE> <VALUE> [ <INTRERNAL_VALUE> ]</tt> | <tt>php_rule <MODE> <DIRECTIVE> <VALUE> [ <INTRERNAL_VALUE> ]</tt> | ||
где | где | ||
- | ''<MODE>'' | + | * ''<MODE>'' — это имя профиля |
- | ''<DIRECTIVE>'' | + | * ''<DIRECTIVE>'' — это название директивы в php.ini |
- | ''<VALUE>'' | + | * ''<VALUE>'' — требуемое значение для ''<DIRECTIVE>'' |
дополнительный необязательный параметр: | дополнительный необязательный параметр: | ||
- | ''<INTRERNAL_VALUE>'' | + | * ''<INTRERNAL_VALUE>'' — значение в понимании PHP. Дело в том, что не все значения интерпретатор использует в том виде в котором они определены в php.ini. Например: «E_ALL & E_NOTICE» -> «2039» |
Также есть несколько переменных, которые можно и нужно использовать: | Также есть несколько переменных, которые можно и нужно использовать: | ||
- | ''PHP_SAPI'' | + | * ''PHP_SAPI'' — имя SAPI модуля. |
- | ''PHP_VERSION'' | + | * ''PHP_VERSION'' — версия PHP. |
- | ''PHP_INI'' | + | * ''PHP_INI'' — эта переменная содержит путь до php.ini . |
- | ''php_on'' | + | * ''php_on'' — значение истины. |
- | ''php_off'' | + | * ''php_off'' — значение ложь. |
- | Вот и пока всё | + | Вот и пока всё … |
- | Давайте теперь попрактикуемся | + | Давайте теперь попрактикуемся … создадим профиль подназванием «сrazyfrog». |
Файл {{path|/etc/php/4.4.1/cli/control.d/crazyfrog}}: | Файл {{path|/etc/php/4.4.1/cli/control.d/crazyfrog}}: |
Текущая версия на 16:53, 23 декабря 2008
Профили
Всякое может случиться, иногда бывает очень удобно зафиксировать состояние конфигурации в нескольких критичных точках, а потом менять эти состояния одной командой.
При этом важно чтобы изменялось именно состояние интерпретатора, а не его конфигурационного файла. Ведь этот файл только инструмент для задания/корректировки поведения PHP. Так, например, если в php.ini не указывать директиву safe_mode, то в большинстве сборок (это зависит от ключей сборки) она бутет включена. Другими словами, чтобы понять в каком стотоянии находиться интерпретатор нужно учитывать его настройки по умолчанию.
В реализации это функциональности нам поможет control(8).
Настройка
В PHP существует возможность создавать профили для php.ini. Для каждого профиля вы можете указывать директивы и их значения, критичные для данного профиля конфигурации. По умолчанию профилей три и они соответствуют разным уровням безопасности:
- restricted
- relaxed
- public
Для получения более подробного описания об этих уровнях вы можете воспользоваться командой:
$ control <FACILITY> help
Если по каким-либо причинам вам не нравятся профили по умолчанию, вы можете создать собственный профиль.
Создание дополнительных профилей
Вы можете создавать свои собственные профили конфигурации. Для этих целей используется директория: /etc/php/<VERSION>/<SAPI>/control.d/
В этой директории находятся описания дополнительных профилей. Они могут находиться как в одном файле, так и в разных. Все что будет находится в этой директории будет использоваться. Поэтому в этой служебной директории не должно быть посторонних файлов.
Чтобы описать профиль используется функция «php_rule». Формат у нее следующий:
php_rule <MODE> <DIRECTIVE> <VALUE> [ <INTRERNAL_VALUE> ]
где
- <MODE> — это имя профиля
- <DIRECTIVE> — это название директивы в php.ini
- <VALUE> — требуемое значение для <DIRECTIVE>
дополнительный необязательный параметр:
- <INTRERNAL_VALUE> — значение в понимании PHP. Дело в том, что не все значения интерпретатор использует в том виде в котором они определены в php.ini. Например: «E_ALL & E_NOTICE» -> «2039»
Также есть несколько переменных, которые можно и нужно использовать:
- PHP_SAPI — имя SAPI модуля.
- PHP_VERSION — версия PHP.
- PHP_INI — эта переменная содержит путь до php.ini .
- php_on — значение истины.
- php_off — значение ложь.
Вот и пока всё …
Давайте теперь попрактикуемся … создадим профиль подназванием «сrazyfrog».
Файл /etc/php/4.4.1/cli/control.d/crazyfrog:
php_rule "crazyfrog" "safe_mode" "$php_on" php_rule "crazyfrog" "post_max_size" "1M" php_rule "crazyfrog" "error_reporting" "E_ALL & E_NOTICE" "2039" php_rule "crazyfrog" "extension_dir" "/usr/lib/php/$PHP_VERSION/extensions/"
Теперь можно сказать:
$ control php4_cli list crazyfrog restricted relaxed public
Описание того что будет измененино этим профилем атоматически добавляется в сообщение help:
$ control php4_cli help crazyfrog: Following directives shuild be changed/added at `crazyfrog' security mode. safe_mode = On post_max_size = "1M" error_reporting = E_ALL & ~E_NOTICE extension_dir = "/usr/lib/php/4.4.1/extensions/" ... тут остальной help ...
Вуаля.