Различия

Показаны различия между двумя версиями страницы.


Предыдущая версия
php.ini [2024/08/21 11:10] (текущий) – [Описание директив PHP] darkfire
Строка 1: Строка 1:
 +====== Настройка файла php.ini для высоконагруженных сайтов ======
 +{{htmlmetatags>
 +metatag-description=(Базовая настройка PHP. php.ini — это конфигурационный файл, содержащий настройки интерпретатора PHP.)
 +}}
 + 
 +**php.ini** - конфигурационный файл интерпретатора [[PHP|PHP]]. Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса [[fastcgi|php-fpm]]. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini.
 +===== Где находится файл php.ini =====
 +{{ ::phpinfo_php.ini.jpg?nolink |}}
 +Расположение файла php.ini в разных операционных системах и разных [[paneli_upravlenija_xostingom|панелей управления хостингом]] отличается. Ini файлов может быть много, под каждую версию PHP - отдельный php.ini. Чтобы узнать какой php.ini загружен для вашего сайта, нужно узнать чему равен параметр "Loaded Configuration File", например через функцию [[phpinfo|phpinfo()]]. Или использовать консольную команду:
 +<file bash>
 +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
 +</file>
 +Давайте разберем поиск php.ini на сложном примере [[ioncube|установки модуля IonCube]], при условии установленных разных версий интерпретатора PHP на вашем VPS.
 +
 +===== Задать базовые настройки php.ini для PHP 8.1 и выше =====
 +После [[https://dieg.info/vps-hosting/|покупки VPS]] и установки [[paneli_upravlenija_xostingom|панели]], зачастую нужно сразу меня настройки по умолчанию PHP. Если установлена панель, лучше это делать через нее, а не на прямую в консоли. В любом случае, я описываю что нужно менять, а каким способом решать вам.
 +
 +Для моего сайта php.ini расположен по пути /etc/php/8.1/fpm/php.ini (как искать php.ini читайте выше). Обязательно делайте бэкап файла.
 +
 +И так какие базовые настройки нужно менять сразу в php.ini для высоконагруженных сайтов. Эти базовые настройки помогут вам оптимизировать работу PHP 8.3 на вашем сервере и обеспечить стабильную работу приложений.
 +<file bash>
 +;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
 +</file>
 +После изменения, нужно указать ОС перечитать настройки, в моем случае это будет команда:
 +<file bash>
 +systemctl reload php8.1-fpm.service
 +</file>
 +
 +Изучите также статьи - это будет полезно для понимания сделанных изменений в php.ini:
 +  * [[ulimit]]
 +  * [[cheklist_nastrojka_vps_vds_vydelennogo_servera_linux]]
 +
 +===== Описание директив PHP =====
 +
 +Пример получения значение параметра из php.ini при помощи PHP кода:
 +<file php>
 +<?php echo ini_get('post_max_size'); ?>
 +</file>
 +
 +  * register_long_arrays Off - сообщает PHP, следует ли регистрировать устаревшие длинные предопределенные переменные типа $HTTP_*_VARS. Если вы их не используете, рекомендуем отключить их из соображений производительности. Вместо них следует использовать суперглобальные массивы, например $_GET. Эта директива стала доступна начиная с версии PHP 5.0.0.
 +  * [[out>http://www.php.net/manual/ru/ini.core.php#ini.register-globals|register_globals]] Off - запрещает регистрацию переменных, полученных методом [[POST]] или [[GET]] в глобальный массив [[php#superglobalnye_peremennye|$GLOBALS]]. Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
 +  * opcache.enable = 1 — включает кэширование байт-кода, что значительно ускоряет выполнение PHP-скриптов. По умолчанию включено.
 +  * [[https://www.php.net/manual/ru/ini.list.php|Список директив php.ini]]
 +      * memory_limit - максимальный объем памяти, выделяемый сценарию
 +      * date.timezone указывает часовой пояс для вашего сайта: [[https://www.php.net/manual/ru/timezones.php|Список поддерживаемых временных (часовых) зон]]. [[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 (расположенного в корне сайта) следующие строчки:<file>
 +<?php ini_set("memory_limit", "32M"); ?>
 +</file> это если хостер не отключил поддержку ini_set в настройках сервера.
 +  * Положить в корень сайта файл .htaccess следующего содержания:<file>php_value memory_limit 32M
 +</file>лимит можно изменять самостоятельно, можно поставить и 64M но не наглеть :) Если же такой файл уже есть в корне сайта — просто добавьте в него приведенную выше строку. Если у хостера PHP работает ка PHP-CGI через suPHP, то это может вызвать ошибку 500, значить использовать директивы php_flag, php_value в файле .htaccess невозможно!
 +  * Некоторые хостеры поддерживают работу php.ini у клиента, т.е. вы можете самостоятельно делать свои настройки PHP для своей учетной записи. А значить создайте файл php.ini в корне сайта и добавьте следующий код: <file>
 +memory_limit = 32M
 +</file>
 +  * Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP.
  

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!