6.1.3 Основные параметры и конфигурация php.ini
php.ini — это файл конфигурации, содержащий настройки PHP вашего веб-сервера. Он позволяет вам контролировать правила Ваших сайтов, связанные с PHP, такие, как установка ограничения размера при загрузке файлов и скрытие сообщений об ошибках.
Расположение файла конфигурации PHP зависит от веб-сервера. Чтобы изменить его настройки, его необходимо отредактировать с помощью любого текстового редактора.
В большинстве случаев, необходимость редактировать php.ini возникает либо при разворачивании сервера, либо для применения рекомендаций по улучшению работы Вашего сайта от Вашей CMS.
Рекомендуется ознакомление с официальной документацией и, при необходимости, с полным списком возможных директив.
Основные переменные файла конфигурации
В этом материале мы ознакомимся с основными базоыми переменными, изменение которых может потребоваться в подавляющем большинстве случаев:
1. Ограничения на использование ресурсов:
memory_limit=
. Это ограничение устанавливает максимальный объем памяти (в мегабайтах), который скрипт PHP может использовать во время выполнения. Если скрипт пытается использовать больше памяти, чем указано в этой переменной, возникает фатальная ошибка.upload_max_filesize=
. Определяет максимальный размер загружаемых файлов через HTTP POST. Файлы, превышающие это значение, будут отклонены при загрузке.post_max_size=
. Устанавливает максимальный размер данных, который может быть отправлен через метод POST в PHP-скриптах. Если отправленные данные превышают это значение, они будут обрезаны.max_execution_time=
. Определяет максимальное время (в секундах), в течение которого PHP-скрипт может выполняться. Если скрипт не завершается в течение этого времени, он будет автоматически прерван.max_input_time=
. Устанавливает максимальное время (в секундах), в течение которого PHP-скрипт может принимать входные данные (например, данные формы). Если время превышено, PHP завершает выполнение скрипта.max_input_vars=
. Количество входных переменных, которые могут быть приняты в одном запросе (ограничение накладывается на каждую из глобальных переменных$_GET
,$_POST
и$_COOKIE
отдельно).
2. Работа с ошибками:
display_errors=
. Определяет, должны ли ошибки PHP выводиться непосредственно веб-страницей или нет. При значенииOn
ошибки будут выводиться напрямую на открытую в браузере страницу, при их наличии.error_reporting=
. Определяет, какие типы ошибок PHP будут регистрироваться и выводиться (еслиdisplay_errors
установлен вOn
). Обычно рекомендуется установить значениеE_ALL
для отслеживания всех типов ошибок в процессе разработки и тестирования. На производственном сервере может быть полезно установить более строгие настройки, такие какE_ERROR
илиE_WARNING
, чтобы избежать вывода ненужной информации.
3. Безопасность:
register_globals=
. Определяет, разрешено ли автоматическое создание глобальных переменных из входных данных, таких как запросы GET, POST и куки. Начиная с версии PHP 5.4, по-умолчанию установлена вOff
, так как ее включение может вызвать проблемы с безопасностью.session.save_path=
. Определяет путь к каталогу, в котором PHP сохраняет данные сеанса для временного хранение. Каталог должен иметь соответствующие права и разрешения. Значение пути должно быть в кавычках.
4. Почта:
sendmail_path=
. Определяет путь к исполняемому файлу sendmail, который обычно используется PHP для отправки электронной почты. Значение пути должно быть в кавычках.
С помощью php.ini также можно активировать PHP-расширения на Вашем сервере после их установки. Например:
extension=intl.so
extension=imagick.so
или:
zend_extension = /usr/lib/php/20210902/ioncube_loader_lin_8.1.so
Конкретные директивы зависят от конфигурации Вашего сервера и документации соответствующих плагинов.
php.ini на хостинге
Важно: на услугах хостинга, подобные ограничения устанавливаются на уровне тарифного плана. Увеличение параметров в файле php.ini на хостинге выше квот тарифного плана не возымеет никакого эффекта. С квотами своего тарифного плана можете ознакомиться в соответствующей таблице, пролистав вниз и нажав Подробнее под интересующим тарифным планом.
На нашем shared-хостинге, php.ini по умолчанию расположен по пути ~/php-bin/php.ini
и выглядит следующим образом:
register_globals= Off
display_errors= Off
log_errors= On
max_execution_time= 60
memory_limit= 512M
upload_max_filesize= 196M
post_max_size= 256M
max_input_vars= 20480
sendmail_path = "/usr/sbin/sendmail -t -i -f examplemail@exampledomain.com"
session.save_path = "/var/www/exampleuser/data/bin-tmp"
Большинство доступных настроек PHP можно изменить средствами панели, с помощью вкладки Настройки PHP.
php.ini на виртуальном/выделенном сервере
На виртуальных/выделенных серверах локация php.ini может существенно различаться. Простейший метод выявить локацию файла это подключиться по SSH и выполнить следующую команду:
- php --ini
ВыводConfiguration File (php.ini) Path: /etc/php/8.1/cli
Loaded Configuration File: /etc/php/8.1/cli/php.ini
Совет: если на сервере установлено несколько версий PHP, просто используйте команду следующего вида:
- php-7.4 --ini
Где 7.4 необходимо заменить интересующей Вас версией.
После свежей установки PHP, в конфигурационном файле могут вообще отсутствовать любые пользовательские директивы. В таком случае, PHP будет инициализироваться с значениями по-умолчанию.
Вопрос: какие значения ограничений PHP стоит указать для стабильной работы сервера?
Это весьма нетривиальный вопрос, который требует уточнения контекста конфигурации Вашего сервера и требований Вашего сайта. Общие рекомендации можно подытожить следующим образом:
memory_limit=
. Не менее 1024 МБ и не более половины размера ОЗУ сервера.upload_max_filesize=
. Не менее 1024 МБ.post_max_size=
. Равен или немного выше значенияupload_max_filesize=
. Для 1024 в вышестоящей имеет смысл установить примерно 1060.max_execution_time=
. Сильно зависит от контекста. Значение в 300 секунд можно считать усредненным.max_input_time=
. 30 секунд, если не имеется других требований.max_input_vars=
. Многие CMS требуют высокие значения этой переменной. Даже 10240 в качестве ограничения навряд ли приведет к негативным последствиям.
Важно: после правок указанных файлов, для применения новых настроек необходим перезапуск веб-сервера. Для ISPManager4, выполнить это можно под root в разделе Сервисы. Для серверв без панели это достигается с помощью соответвующих команд.