Настройка файла php.ini для высоконагруженных сайтов
php.ini - конфигурационный файл интерпретатора PHP. Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса php-fpm. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini.
Где находится файл php.ini
Расположение файла php.ini в разных операционных системах и разных панелей управления хостингом отличается. Ini файлов может быть много, под каждую версию PHP - отдельный php.ini. Чтобы узнать какой php.ini загружен для вашего сайта, нужно узнать чему равен параметр "Loaded Configuration File", например через функцию phpinfo(). Или использовать консольную команду:
php -i | grep php.ini Configuration File (php.ini) Path => /etc/php/8.2/cli Loaded Configuration File => /etc/php/8.2/cli/php.ini
Давайте разберем поиск php.ini на сложном примере установки модуля IonCube, при условии установленных разных версий интерпретатора PHP на вашем VPS.
Задать базовые настройки php.ini для PHP 8.1 и выше
После покупки VPS и установки панели, зачастую нужно сразу меня настройки по умолчанию PHP. Если установлена панель, лучше это делать через нее, а не на прямую в консоли. В любом случае, я описываю что нужно менять, а каким способом решать вам.
Для моего сайта php.ini расположен по пути /etc/php/8.1/fpm/php.ini (как искать php.ini читайте выше). Обязательно делайте бэкап файла.
И так какие базовые настройки нужно менять сразу в php.ini для высоконагруженных сайтов. Эти базовые настройки помогут вам оптимизировать работу PHP 8.3 на вашем сервере и обеспечить стабильную работу приложений.
;date.timezone менять опционально, по умолчанию UTC date.timezone = Europe/Kyiv memory_limit = 512M upload_max_filesize = 80M post_max_size = 80M max_execution_time = 300 ;opcache.enable по умолчанию включено opcache.enable = 1
После изменения, нужно указать ОС перечитать настройки, в моем случае это будет команда:
systemctl reload php8.1-fpm.service
Изучите также статьи - это будет полезно для понимания сделанных изменений в php.ini:
Описание директив PHP
Пример получения значение параметра из php.ini при помощи PHP кода:
<?php echo ini_get('post_max_size'); ?>
- register_long_arrays Off - сообщает PHP, следует ли регистрировать устаревшие длинные предопределенные переменные типа $HTTP_*_VARS. Если вы их не используете, рекомендуем отключить их из соображений производительности. Вместо них следует использовать суперглобальные массивы, например $_GET. Эта директива стала доступна начиная с версии PHP 5.0.0.
- register_globals Off - запрещает регистрацию переменных, полученных методом Метод HTTP POST или get в глобальный массив $GLOBALS. Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
- opcache.enable = 1 — включает кэширование байт-кода, что значительно ускоряет выполнение PHP-скриптов. По умолчанию включено.
-
- memory_limit - максимальный объем памяти, выделяемый сценарию
- date.timezone указывает часовой пояс для вашего сайта: Список поддерживаемых временных (часовых) зон. Что такое UTC?
- upload_max_filesize - максимальный размер загружаемого файла на сервер.
- post_max_size - максимальный размер данных, которые могут быть отправлены по методу POST. Как правило, значение должно быть больше, чем upload_max_filesize и меньше, чем memory_limit. Используются символы для значений байта: K(kilo), M(mega), и G(giga). Например, 80M.
Ограничение по ресурсам (изменить время выполнения скрипта):
- max_execution_time - устанавливается максимальное возможное время выполнения скрипта в секундах. Большинство хостинговых компаний устанавливают максимальное время выполнения от 30 до 60 секунд. Этот диапазон дает вашим PHP-скриптам достаточно времени для выполнения своей работы, даже если для их выполнения требуется некоторое время. Некоторые разработчики могут выбрать максимум значение в 300 секунд, но это явно не правильно и должно использоваться как временное решение для нахождения и устранения узкого места.
- max_input_time - Максимально возможное время в секундах, которое скрипт может потратить на обработку загружаемых данных.
- memory_limit - Максимальный объем памяти, выделяемый сценарию, составляет, например, 8 Мбайт.
Распространённые ошибки PHP
Fatal error: Allowed memory size of
Fatal error: Allowed memory size of 54554432 bytes exhausted (tried to allocate ….."
Эта ошибка означает, что ваш скрипт для выполнения требует памяти больше, чем разрешено в настройках PHP на сервере. Т.е. запрашиваемое значение превышает максимальное количество оперативной памяти предоставляемого пользовательскому аккаунту виртуальным хостингом.
Решение:
- Попробовать самостоятельно изменить это значение, добавив в самое начала index.php (расположенного в корне сайта) следующие строчки:
<?php ini_set("memory_limit", "32M"); ?>
это если хостер не отключил поддержку ini_set в настройках сервера.
- Положить в корень сайта файл .htaccess следующего содержания:
php_value memory_limit 32M
лимит можно изменять самостоятельно, можно поставить и 64M но не наглеть :) Если же такой файл уже есть в корне сайта — просто добавьте в него приведенную выше строку. Если у хостера PHP работает ка PHP-CGI через suPHP, то это может вызвать ошибку 500, значить использовать директивы php_flag, php_value в файле .htaccess невозможно!
- Некоторые хостеры поддерживают работу php.ini у клиента, т.е. вы можете самостоятельно делать свои настройки PHP для своей учетной записи. А значить создайте файл php.ini в корне сайта и добавьте следующий код:
memory_limit = 32M
- Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP.
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!
7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах