Включение PHP: настройка расширений и отладки

Раздел: PHP -> Изменение параметров конфигурации PHP

Включение PHP (активация интерпретатора) необходимо для обработки скриптов на веб-сервере или в командной строке. В зависимости от окружения используются различные методы: подключение модуля к Apache, настройка FastCGI для Nginx, изменение php.ini или временные параметры через CLI. Ниже рассмотрены основные и альтернативные способы.

Основное решение: подключение модуля PHP к Apache

Наиболее распространённый способ для серверов Apache - использование модуля mod_php. После установки PHP (например, пакет php8.1) модуль активируется командой:

sudo a2enmod php8.1
sudo systemctl restart apache2

Если используется многопроцессорный модуль (MPM), необходимо включить prefork (a2enmod mpm_prefork). После перезапуска сервер будет обрабатывать файлы .php. Проверить статус можно через phpinfo().

Типичная ошибка: 'Module php8.1 does not exist'. Причина - не установлен пакет libapache2-mod-php. Решение: выполнить sudo apt install libapache2-mod-php8.1.

Варианты включения PHP

Как включить конкретное расширение PHP через php.ini?

Цель: добавить поддержку функций (curl, mbstring, gd и т.д.). В файле php.ini найдите параметр extension_dir (путь к папке с .so-файлами) и раскомментируйте строку с нужным расширением:

extension=curl
extension=mbstring
extension=gd

После сохранения перезапустите веб-сервер или PHP-FPM. Проверьте через phpinfo().

Ошибка: 'PHP Warning: PHP Startup: Unable to load dynamic library'. Причины: расширение не скомпилировано для текущей версии PHP, отсутствует сам .so-файл или неправильный путь в extension_dir. Решение: установите пакет php-<extension> (например, sudo apt install php-curl) и проверьте корректность пути.

Как включить отображение ошибок PHP для отладки?

Для разработки полезно видеть все ошибки. В php.ini установите:

display_errors = On
error_reporting = E_ALL

Также можно включить вывод стартовых ошибок (display_startup_errors = On). На рабочем сервере эти параметры отключаются. Альтернатива - задать параметры в скрипте через ini_set('display_errors', '1').

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

Как включить PHP для определённой папки через .htaccess?

Если нет доступа к основному конфигу Apache, можно использовать .htaccess. Добавьте в корень сайта:

AddHandler application/x-httpd-php .php
# или для конкретной поддиректории:

    SetHandler application/x-httpd-php

Важно, чтобы в главном конфиге было разрешено переопределение (AllowOverride All).

Ошибка: 500 Internal Server Error. Проверьте синтаксис .htaccess и наличие модуля mod_rewrite или mime. Убедитесь, что AllowOverride не установлен в None.

Как включить PHP на сервере Nginx через PHP-FPM?

Nginx не обрабатывает PHP напрямую, для этого используется FastCGI-процесс PHP-FPM. В блоке server добавьте:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
}

Убедитесь, что PHP-FPM запущен (sudo systemctl start php8.1-fpm). Перезагрузите Nginx.

Типичная ошибка: 502 Bad Gateway. Причины: не запущен php-fpm, неверный сокет, версия PHP не совпадает с установленной. Проверьте статус службы и путь к сокету.

Как временно включить опцию PHP при запуске скрипта из командной строки?

Для одноразовой отладки можно задать параметры через ключ -d без изменения php.ini:

php -d display_errors=1 -d error_reporting=E_ALL script.php

Цель: проверить поведение скрипта с определёнными настройками, не вмешиваясь в глобальную конфигурацию. Удобно для тестирования.

Особенность: некоторые опции (например, disable_functions) нельзя переопределить из командной строки, они блокируются системным php.ini.

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

Пример 1: Включение нескольких опций в php.ini для разработки

Пример
; Включаем отображение всех ошибок
display_errors = On
error_reporting = E_ALL | E_STRICT
; Включаем расширения
extension=curl
extension=mbstring
extension=gd
; Увеличиваем лимиты
memory_limit = 256M
post_max_size = 32M
upload_max_filesize = 16M
; Включаем OPcache
[opcache]
opcache.enable=1
opcache.memory_consumption=128
После перезапуска сервера phpinfo() покажет новые значения. Пример вывода (фрагмент):

display_errors = On (local value: On, master value: On)
error_reporting = 32767 (E_ALL | E_STRICT)
memory_limit = 256M

Пример 2: Переключение между версиями PHP в Apache

Пример
# Отключить PHP 7.4 и включить PHP 8.1
sudo a2dismod php7.4
sudo a2enmod php8.1
sudo systemctl restart apache2
Проверка версии через phpinfo() покажет PHP 8.1. Если модули не найдены, пакеты libapache2-mod-php* должны быть установлены.

Пример 3: Настройка Nginx с PHP-FPM и передача переменных

Пример
location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_intercept_errors on;
}
После перезагрузки Nginx скрипты PHP выполняются. При ошибке 502 проверяем статус php-fpm: systemctl status php8.1-fpm.

Пример 4: Включение расширения через сборку из исходников (phpize)

Пример
# Устанавливаем php8.1-dev и инструменты
sudo apt install php8.1-dev
# Скачиваем исходный код расширения (например, redis)
wget https://pecl.php.net/get/redis-5.3.7.tgz
tar -xzf redis-5.3.7.tgz
cd redis-5.3.7
phpize && ./configure && make && sudo make install
# В php.ini добавляем extension=redis
После добавления строки и перезапуска сервера в phpinfo() появится раздел redis.

Пример 5: Включение строгой типизации глобально через auto_prepend_file

Пример
; В php.ini добавляем
auto_prepend_file = /etc/php/strict_types.php
; Содержимое файла strict_types.php:
<?php
declare(strict_types=1);
Теперь все скрипты будут выполняться в режиме строгих типов. Это полезно для проектов, требующих строгой типизации.

Включение PHP - comments

En
Php enable (php)