Настройка php.ini в операционной системе Ubuntu
Настройка php.ini в Ubuntu
Как найти и изменить основной файл php.ini в Ubuntu?
Самый надёжный способ заключается в использовании команды php -i | grep "Loaded Configuration File" или более короткой php --ini. После определения пути к файлу можно открыть его текстовым редактором, например nano или vim, изменить необходимые параметры и перезапустить веб-сервер (sudo systemctl restart nginx или sudo systemctl restart apache2). Для PHP-FPM дополнительно требуется перезапуск службы: sudo systemctl restart php-fpm.
# Определение пути к php.ini
php -i | grep "Loaded Configuration File"Php ubuntu (php на ubuntu)
Loaded Configuration File => /etc/php/8.1/cli/php.ini
Localhost php (настройка локального сервера php)
Проблема: После редактирования php.ini изменения не вступают в силу.
Решение: проверить, что используется правильный файл (cli или fpm), а также выполнить корректный перезапуск соответствующей службы. Иногда кеш OPcache может хранить старые настройки; в таком случае помогает очистка кеша или перезагрузка сервера.
Как настроить параметры только для режима CLI (командной строки)?
В Ubuntu для CLI используется отдельный файл, обычно расположенный по пути /etc/php/{версия}/cli/php.ini. Изменения в этом файле не влияют на веб-сервер. Это удобно, если требуется, например, увеличить memory_limit для выполнения скриптов в терминале, оставив для веба более строгие ограничения.
# Редактирование php.ini для CLI
sudo nano /etc/php/8.1/cli/php.ini
# Изменить строку memory_limit = 512M
Php windows (php на windows)
Проблема: После редактирования CLI-файла веб-приложение продолжает использовать старые значения.
Решение: это нормальное поведение, так как веб-версия (fpm или mod_php) читает свой собственный php.ini (обычно в /etc/php/8.1/fpm/php.ini).
Как применить настройки для конкретного виртуального хоста через .user.ini?
Если требуется переопределить параметры PHP для отдельного каталога без доступа к основному php.ini, можно создать файл .user.ini в корне веб-сайта. Этот способ поддерживается при использовании PHP-FPM и позволяет задавать директивы, такие как upload_max_filesize или max_execution_time.
# Пример .user.ini
upload_max_filesize = 50M
post_max_size = 60M
max_execution_time = 120Admin php (администрирование php)
Проблема: .user.ini не работает, если используется mod_php (например, с Apache).
Решение: для mod_php настройки уровня каталога задаются через директиву php_value в конфигурации Apache (.htaccess или основном конфиге).
Как изменить параметры PHP из самого скрипта с помощью ini_set()?
Некоторые директивы (например, display_errors, memory_limit при условии, что PHP_VALUE позволяет) могут быть изменены во время выполнения через функцию ini_set(). Это удобно для отладки или временных изменений без редактирования конфигурационных файлов.
<?php
ini_set('display_errors', 1);
ini_set('memory_limit', '256M');
echo memory_get_usage() . " bytes";
?>
Проблема: Некоторые директивы (например, safe_mode или open_basedir) не могут быть переопределены через ini_set(), так как помечены как PHP_INI_SYSTEM.
Решение: такие параметры допустимо изменять только в основном файле php.ini или в конфигурации веб-сервера.
Выбор способа зависит от контекста использования. Для глобальных изменений во всех режимах лучше редактировать /etc/php/{версия}/mods-available/ и подключать их через phpenmod. Для изолированных сред достаточно .user.ini или ini_set().
В этом разделе приведены расширенные примеры настройки php.ini, включая редко используемые параметры и комбинации.
Расширенные примеры настройки php.ini
# Пример 1: Оптимизация производительности с OPcache
zend_extension=opcache
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
После применения OPcache скорость выполнения скриптов возрастает на 20-80% (зависит от нагрузки). Проверить статус можно через phpinfo() или командой php -i | grep opcache.
# Пример 2: Настройка сессий для хранения в Redis
session.save_handler = redis
session.save_path = "tcp://127.0.0.1:6379?auth=secret&weight=1&timeout=2.5"
session.gc_maxlifetime = 86400
Теперь данные сессий будут храниться в Redis, что улучшает производительность при большом количестве одновременных пользователей. Необходимо установить расширение php-redis.
# Пример 3: Ограничение использования ресурсов для конкретного пула FPM через pool.d/
; /etc/php/8.1/fpm/pool.d/www.conf
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 10
pm.max_requests = 500
Эти настройки контролируют количество процессов PHP-FPM. Слишком низкие значения приводят к очередям, высокие - к исчерпанию памяти. Мониторинг выполняется командой: systemctl status php8.1-fpm
# Пример 4: Включение строгой проверки типов для разработки (работает с PHP 7+)
; в php.ini
declare(strict_types=1); // можно задать только в самом скрипте
; вместо этого используйте error_reporting
error_reporting = E_ALL
display_errors = On
display_startup_errors = On
log_errors = On
error_log = /var/log/php_errors.log
При такой конфигурации любые ошибки и уведомления будут выводиться на экран (для разработки) и записываться в файл. В production рекомендуется display_errors = Off и включённый log_errors.
# Пример 5: Настройка upload_tmp_dir и session.save_path для безопасности
upload_tmp_dir = /var/tmp/php_uploads
session.save_path = /var/tmp/php_sessions
Изоляция временных файлов повышает безопасность. Каталоги должны быть недоступны для чтения другими пользователями системы. Права: chmod 700 /var/tmp/php_uploads && chown www-data:www-data /var/tmp/php_uploads.
# Пример 6: Отключение устаревших функций для повышения безопасности
disable_functions = exec, shell_exec, system, passthru, popen, proc_open, show_source
Данная директива (список можно расширять) блокирует опасные функции даже при успешной атаке. Однако следует проверять, не использует ли приложение эти функции легитимно.
# Пример 7: Использование .user.ini для изменения post_max_size и upload_max_filesize
; .user.ini (размещается в DocumentRoot)
post_max_size = 100M
upload_max_filesize = 100M
max_file_uploads = 20
После сохранения файла изменения применяются только для данного каталога (и вложенных). Проверить можно через phpinfo() в том же каталоге: соответствующая секция "Core".
Для получения всех текущих значений php.ini удобно использовать команду:
php -i | grep -E "^(memory_limit|upload_max_filesize|post_max_size|max_execution_time)"
memory_limit => 128M upload_max_filesize => 2M post_max_size => 8M max_execution_time => 30
При работе с несколькими версиями PHP (например, 7.4 и 8.1) следует указывать полный путь к исполняемому файлу, например /usr/bin/php8.1 -i.