Настройка во время выполнения
Поведение этих функций зависит от установок в php.ini.
Имя | По умолчанию | Меняемо | Список изменений |
---|---|---|---|
assert.active | "1" | PHP_INI_ALL | |
assert.bail | "0" | PHP_INI_ALL | |
assert.warning | "1" | PHP_INI_ALL | |
assert.callback | NULL | PHP_INI_ALL | |
assert.quiet_eval | "0" | PHP_INI_ALL | |
enable_dl | "1" | PHP_INI_SYSTEM | Эта возможность устарела и будет обязательно удалена в будущем. |
max_execution_time | "30" | PHP_INI_ALL | |
max_input_time | "-1" | PHP_INI_PERDIR | Доступна с PHP 4.3.0. |
max_input_nesting_level | "64" | PHP_INI_PERDIR | Доступна с PHP 4.4.8 и PHP 5.2.3. |
max_input_vars | 1000 | PHP_INI_PERDIR | Доступна с PHP 5.3.9. |
magic_quotes_gpc | "1" | PHP_INI_PERDIR | PHP_INI_ALL в PHP <= 4.2.3. Удалена в PHP 5.4.0. |
magic_quotes_runtime | "0" | PHP_INI_ALL | Удалена в PHP 5.4.0. |
zend.enable_gc | "1" | PHP_INI_ALL | Доступна с PHP 5.3.0. |
Краткое разъяснение конфигурационных директив.
-
assert.active
boolean -
Включение assert() проверки.
-
assert.bail
boolean -
Завершение работы скрипта при провале проверки утверждений.
-
assert.warning
boolean -
Выдача PHP предупреждений для каждой проваленной проверки утверждения.
-
assert.callback
string -
Пользовательская функция, вызываемая при провале проверки утверждений.
-
assert.quiet_eval
boolean -
Используйте эту настройку функции error_reporting() во время выполнения проверки утверждений. При включении настройки сообщения об ошибках во время проверки утверждений выдаваться не будут (это неявный вызов error_reporting(0)). Если настройка выключена, ошибки будут выдаваться в соответствии с настройками error_reporting()
-
enable_dl
boolean -
Эта директива может оказаться полезной только в PHP, используемом в качестве Apache модуля. С ее помощью можно включать динамическую подгрузку расширений посредством функции dl(). Динамическая загрузка может быть включена или отключена для каждого отдельно взятого виртуального сервера или директории.
Главной причиной, по которой требуется выключение динамической загрузки, является безопасность. С помощью динамической загрузки можно обойти все open_basedir ограничения. По умолчанию динамическая загрузка разрешена, за исключением работы в безопасный режим. В безопасный режим невозможен вызов dl().
-
max_execution_time
integer -
Эта директива задает максимальное время в секундах, в течение которого скрипт должен полностью загрузиться. Если этого не происходит, анализатор завершает его работу. Этот механизм помогает предотвратить зависание сервера из-за криво написанного скрипта. По умолчанию на загрузку дается 30 секунд. Если PHP запущен из командной строки, это значение по умолчанию равно 0.
На максимальное время выполнения не влияют системные вызовы, потоковые операции и т.п. За дополнительной информацией обращайтесь к документации к функции set_time_limit().
При работе в безопасный режим эту настройку нельзя изменить функцией ini_set(). Если значение все же нужно изменить, надо либо выключить безопасный режим, либо изменить значение прямо в php.ini.
Web-серверы обычно имеют свои настройки таймаута, по истечении которого сами завершают выполнение PHP скрипта. В Apache есть директива Timeout, в IIS есть функция CGI timeout. В обоих случаях по умолчанию установлено 300 секунд. Точные значения можно узнать из документации к Web-серверу.
-
max_input_time
integer -
Эта директива задает максимальное время в секундах, в течение которого скрипт должен разобрать все входные данные, переданные запросами вроде POST или GET. Это время измеряется от момента, когда сервером получены все данные, до момента, когда скрипт начинает выполняться.
-
max_input_nesting_level
integer -
Задает максимальную глубину вложенности входных переменных (т.е. $_GET, $_POST..)
-
max_input_vars
integer -
Сколько входных переменных может быть принято в одном запросе (ограничение накладывается на каждую из глобальных переменных $_GET, $_POST и $_COOKIE отдельно). Использование этой директивы снижает вероятность сбоев в случае атак с использованием хеш-коллизий. Если входных переменных больше, чем задано директивой, выбрасывается предупреждение
E_WARNING
, и все последующие переменные в запросе игнорируются. Это ограничение применяется к каждому уровню вложенности входного многомерного массива. -
magic_quotes_gpc
boolean -
Внимание
Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
Задает режим magic_quotes для GPC (Get/Post/Cookie) операций. Если magic_quotes включен, все ' (одинарные кавычки), " (двойные кавычки), \ (обратный слеш) и NUL экранируются обратным слешем автоматически.
Замечание:
В PHP 4, $_ENV переменные также экранируются.
Замечание:
Если включена директива magic_quotes_sybase, она замещает magic_quotes_gpc. Если включены обе директивы, то экранироваться будут только одинарные кавычки, причем экранированы они будут теми же кавычками: ''. Двойные кавычки, обратные слеши и NUL при этом останутся нетронутыми и неэкранированными.
См. также get_magic_quotes_gpc()
-
magic_quotes_runtime
boolean -
Внимание
Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
Если включена директива
magic_quotes_runtime
, большинство функций возвращающих данные из внешних источников, таких как базы данных или текстовые файлы, будут экранировать кавычки обратным слешем. Если при этом директива magic_quotes_sybase также включена, то одинарные кавычки будут экранироваться одинарной кавычкой вместо обратного слеша.Функции, на которые распростаняется действие директивы
magic_quotes_runtime
(исключая функции из PECL):- get_meta_tags()
- file_get_contents()
- file()
- fgets()
- fwrite()
- fread()
- fputcsv()
- stream_socket_recvfrom()
- exec()
- system()
- passthru()
- stream_get_contents()
- bzread()
- gzfile()
- gzgets()
- gzwrite()
- gzread()
- exif_read_data()
- dba_insert()
- dba_replace()
- dba_fetch()
- ibase_fetch_row()
- ibase_fetch_assoc()
- ibase_fetch_object()
- mssql_fetch_row()
- mssql_fetch_object()
- mssql_fetch_array()
- mssql_fetch_assoc()
- mysqli_fetch_row()
- mysqli_fetch_array()
- mysqli_fetch_assoc()
- mysqli_fetch_object()
- pg_fetch_row()
- pg_fetch_assoc()
- pg_fetch_array()
- pg_fetch_object()
- pg_fetch_all()
- pg_select()
- sybase_fetch_object()
- sybase_fetch_array()
- sybase_fetch_assoc()
- SplFileObject::fgets()
- SplFileObject::fgetcsv()
- SplFileObject::fwrite()
-
zend.enable_gc
boolean -
Включает или отключает сборщик циклических ссылок.
Коментарии
Caution: Although magic_quotes_gpc is flagged as dreprecated the default value is still "ON". So you will explicitly have to put
magic_quotes_gpc = Off
into your php.ini. Commeting out the magic_quotes_gpc-line will not turn magic_quotes_gpc off.
I think it is important to mention that some distributions apply bugfixes for older versions so "Available since PHP 5.3.9" is not reliable, for example:
debian squeeze implemented the directive max_input_vars in PHP 5.3.3-7+squeeze7 (see http://ftp-master.metadata.debian.org/changelogs/main/p/php5/php5_5.3.3-7+squeeze17_changelog )
The max_input_vars limit can be overcome by reading the input in raw, i.e.:
<?php
$sRawInputData= fopen( 'php://input' );
?>
The max_input_vars setting is defined as "How many input variables may be accepted" but this is not completely correct. There is a +1 factor.
For example, if the value is 2 then the $_POST array can have up to 3 elements, if it is 1000 then it can have 1001 elements, and so on.
I want to stop the execution of the php code when there is a chance that some data was not received. Therefore, instead of relying on the standard E_WARNING, I do this in my code.
<?php
$max_input_vars = ini_get('max_input_vars');
if (count($_POST) === $max_input_vars + 1) { // note the +1 here
throw new Exception();
}
?>
If the size of the $_POST array reaches the maximum then there is the chance that there was more data so it is better to stay on the safe side and increase the config value.