Как настроить PHP: работа с конфигурационными файлами и директивами

Раздел: Конфигурация PHP -> Файл php.ini

Основные способы настройки параметров PHP

Как найти и изменить основной файл php.ini?

Файл php.ini является главным конфигурационным файлом PHP. Для его редактирования необходимо определить местоположение. Создайте скрипт с вызовом phpinfo() и найдите строку 'Loaded Configuration File'.

<?php
phpinfo();
?>

настройка файла php ini (настройка файла php.ini)

После определения пути откройте файл в текстовом редакторе. Измените необходимые директивы, сохраните и перезапустите веб-сервер или PHP-FPM.

; Пример изменения лимита памяти и времени выполнения
memory_limit = 256M
max_execution_time = 120

Типичная ошибка: Изменения не вступают в силу. Проверьте, что сервер перезапущен. Иногда существует отдельный php.ini для CLI и веб-сервера. Убедитесь, что редактируется правильный файл.

Как применить настройки только для одной директории с помощью .user.ini?

На общих хостингах доступ к основному php.ini часто ограничен. Вместо этого используется файл .user.ini. Он работает с PHP-FPM или CGI. Поместите его в корень нужной папки.

; .user.ini в /public_html/site/
upload_max_filesize = 64M
post_max_size = 64M

Директивы применяются к этой папке и вложенным. Перезагрузка сервера не требуется, изменения действуют мгновенно.

Проблема: Файл .user.ini не обрабатывается при использовании PHP как модуля Apache (mod_php). Убедитесь, что используется FastCGI или FPM.

Как настроить PHP через файл .htaccess в Apache?

Если веб-сервер Apache и PHP работает как модуль, можно применить .htaccess. Директивы задаются с помощью php_value и php_flag.

# .htaccess в корне сайта
php_value memory_limit 256M
php_value upload_max_filesize 128M
php_flag display_errors on

Действует на текущую директорию и поддиректории. Требуется разрешение AllowOverride All в конфигурации Apache.

Ошибка: Директивы не работают, если используется PHP-FPM или Nginx, так как .htaccess не поддерживается.

Как изменить параметры PHP во время выполнения скрипта через ini_set?

Функция ini_set() позволяет переопределить некоторые директивы в PHP-коде. Подходит для временных изменений в рамках одного запроса.

// Увеличить лимит памяти для текущего скрипта
ini_set('memory_limit', '512M');
// Увеличить время выполнения
ini_set('max_execution_time', 300);

Не все директивы можно изменить во время выполнения; зависит от режима констант PHP_INI_*. Подробности в документации.

Проблема: Попытка изменить директиву с доступом только в php.ini (например, register_globals) вызовет ошибку. Используйте ini_get() для проверки.

Как настроить PHP через панель управления хостингом (cPanel, ISPmanager)?

Хостинг-панели предоставляют графический интерфейс для изменения настроек PHP. В cPanel это раздел MultiPHP INI Editor или Select PHP Version. Выберите нужные значения и сохраните.

// Визуальный редактор позволяет менять memory_limit, upload_max_filesize, max_execution_time и др.

Этот способ удобен для неопытных пользователей, так как не требует доступа к файлам.

Недостаток: Возможен ограниченный набор изменяемых параметров. Для детальной настройки может потребоваться ручное редактирование.

Как задать параметры PHP в Docker-контейнере?

При использовании Docker конфигурацию можно передать через Dockerfile или монтирование файла. Создайте файл custom.ini с нужными директивами.

# Dockerfile
FROM php:8.2-fpm
COPY custom.ini /usr/local/etc/php/conf.d/custom.ini

Пересоберите образ или используйте volume mount для динамического изменения.

Ошибка: Если файл скопирован не в правильную папку, директивы не применится. Стандартная папка для дополнительных конфигов - /usr/local/etc/php/conf.d/.

Расширенные примеры конфигурации PHP

Пример 1. Динамическое изменение memory_limit и проверка через ini_get

Функция ini_set изменяет значение директивы на время выполнения скрипта. ini_get позволяет прочитать текущее значение.

Пример
<?php
echo 'До: ' . ini_get('memory_limit') . "\n";
ini_set('memory_limit', '512M');
echo 'После: ' . ini_get('memory_limit') . "\n";
?>
До: 128M
После: 512M

Такой подход полезен для скриптов, которым требуется больше памяти (обработка изображений, работа с большими файлами).

Пример 2. Настройка через .htaccess для Apache с проверкой

Создайте файл .htaccess в корне сайта.

Пример
# .htaccess
php_value error_reporting E_ALL
php_flag display_errors on
php_value upload_max_filesize 32M
php_value post_max_size 64M
php_value max_execution_time 180

После сохранения создайте скрипт, который выводит значения:

Пример
<?php
echo 'upload_max_filesize: ' . ini_get('upload_max_filesize') . "\n";
echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n";
?>
upload_max_filesize: 32M
max_execution_time: 180

Учтите, что .htaccess работает только при включенном mod_php или mod_suphp.

Пример 3. Конфигурация PHP в Docker с несколькими ini-файлами

Создайте несколько ini-файлов для разных целей и скопируйте их в conf.d.

Пример
# production.ini
memory_limit = 1024M
max_execution_time = 300
opcache.enable = 1

# debug.ini
display_errors = On
error_reporting = E_ALL
log_errors = On
Пример
# Dockerfile
FROM php:8.2-fpm
COPY production.ini /usr/local/etc/php/conf.d/product.ini
COPY debug.ini /usr/local/etc/php/conf.d/debug.ini

При необходимости переопределите настройки для отладки, заменив образ.

Пример 4. Использование ini_set для настройки сессий

Можно изменить параметры хранения сессий во время выполнения.

Пример
<?php
ini_set('session.save_handler', 'files');
ini_set('session.save_path', '/var/custom_sessions');
ini_set('session.gc_maxlifetime', 86400); // 24 часа
session_start();
?>

Это позволяет сохранять сессии в нестандартное место для оптимизации.

Пример 5. Проверка всех директив через phpinfo и фильтрация

Создайте скрипт для вывода только измененных значений.

Пример
<?php
$custom = ['memory_limit', 'upload_max_filesize', 'post_max_size', 'max_execution_time'];
foreach ($custom as $key) {
    echo "$key = " . ini_get($key) . "\n";
}
?>
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 120

Настройка файла php.ini - comments

En
настройка файла php ini (php)