6.1.3 Основные параметры и конфигурация php.ini

TheHost php.ini Banner

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 и выполнить следующую команду:

  1. php --ini
Вывод
Configuration File (php.ini) Path: /etc/php/8.1/cli Loaded Configuration File: /etc/php/8.1/cli/php.ini

Совет: если на сервере установлено несколько версий PHP, просто используйте команду следующего вида:

  1. 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 в разделе Сервисы. Для серверв без панели это достигается с помощью соответвующих команд.