Настройка php.ini в операционной системе Ubuntu

Раздел: Администрирование PHP -> Настройка PHP

Настройка 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 = 120

Admin 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 (изменение настроек php)
- Php ini memory (настройка memory_limit в php)
- Php ini linux (настройка php.ini в linux/ubuntu)

В этом разделе приведены расширенные примеры настройки 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.

Настройка php.ini в Linux/Ubuntu - comments

En
Php ini linux (php)