Недопустимая команда ‘php_flag’, возможно, написана с ошибкой или определена модулем, не включенным в конфигурацию сервера.

Вопрос или проблема

Я пытаюсь настроить PhpPgAdmin. Но сервис не запускается.

Я получаю следующий вывод, когда выполняю sudo systemctl status httpd.service:

● httpd.service - Apache Web Server
     Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
     Active: failed (Result: exit-code) since Tue 2020-04-14 12:05:14 CDT; 1s ago
    Process: 31293 ExecStart=/usr/bin/httpd -k start -DFOREGROUND (code=exited, status=1/FAILURE)
   Main PID: 31293 (code=exited, status=1/FAILURE)

Apr 14 12:05:14 ardc-pc systemd[1]: Started Apache Web Server.
Apr 14 12:05:14 ardc-pc httpd[31293]: AH00526: Syntax error on line 10 of /etc/httpd/conf/extra/phppgadmin.conf:
Apr 14 12:05:14 ardc-pc httpd[31293]: Invalid command 'php_flag', perhaps misspelled or defined by a module not included in the server configuration
Apr 14 12:05:14 ardc-pc systemd[1]: httpd.service: Main process exited, code=exited, status=1/FAILURE
Apr 14 12:05:14 ardc-pc systemd[1]: httpd.service: Failed with result 'exit-code'.

Это мой файл phppgadming.conf:

Alias /phppgadmin "/usr/share/webapps/phppgadmin"
<Directory "/usr/share/webapps/phppgadmin">
     DirectoryIndex index.php
     AllowOverride All
     Options FollowSymlinks
     Require all granted

     # PhpPgAdmin вызовет устаревшие предупреждения, которые ведут
     # к ошибкам синтаксического анализа в JS
     php_flag display_startup_errors off
     php_flag display_errors off
     php_flag html_errors off
</Directory>

Как и говорится на вики-странице PhpPgAdmin.

Я использую Arch Linux. Я установил php, apache HTTP Server и все работало, я видел свою страницу индекса на localhost. Но когда я добавляю файл конфигурации для PhpPgAdmin, сервер останавливается. Что я делаю не так?

Я выяснил, в чем была ошибка.

Как говорится на вики-странице apache HTTP Server, мне нужно было установить расширение PHP. Следуя инструкциям, все работает!

Настройка обработки ошибок PHP может быть выполнена в коде PHP для вашего сайта. Вам не нужны неподдерживаемые директивы php_value и php_flag в HTACCESS.

Вот основа кода, который я использую для разработки и продакшена:

ini_set('display_startup_errors','1');
ini_set('display_errors','1');
ini_set('log_errors','1');
ini_set('error_log',$PHPerrPath);
error_reporting(E_ALL);
set_exception_handler('OnPHPfatalErr');

Ответ или решение

Ошибка "Invalid command ‘php_flag’, perhaps misspelled or defined by a module not included in the server configuration" возникает, когда сервер Apache не может распознать команду php_flag, находящуюся в конфигурационном файле. Это достаточно распространённая проблема при настройке серверов на базе Apache для работы с PHP.

Теоретическое обоснование

suexec – это модуль Apache, который позволяет разным виртуальным хостам использовать собственные копии PHP, изолированные друг от друга. Он в сочетании с конфигурацией PHP через .htaccess, php.ini или в конфигурационных файлах Apache предоставляет гибкие возможности для настройки поведения PHP. Однако в некоторых случаях, такие команды как php_flag и php_value могут не поддерживаться, из-за чего сервер Apache не запускается.

Эти команды используются для моментального изменения конфигурации PHP внутри Apache. Если модуль PHP не интегрирован с Apache как модуль, а работает через FPM (FastCGI Process Manager), эти команды окажутся недоступными. В подобных случаях, конфигурация должна выполняться либо в главном файле конфигурации PHP (обычно php.ini), либо в самом PHP-коде.

Примеры

В предоставленном описании вы пытаетесь настроить PhpPgAdmin и получаете ошибку "Invalid command ‘php_flag’". Ваш файл конфигурации /etc/httpd/conf/extra/phppgadmin.conf содержит команды, которые не поддерживаются в вашей текущей конфигурации Apache совместно с PHP через FPM или другой несоответствующий модуль.

Пример конфигурации

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/usr/share/webapps/phppgadmin"

    <Directory "/usr/share/webapps/phppgadmin">
        AllowOverride All
        Options FollowSymLinks
        Require all granted
    </Directory>
</VirtualHost>

Применение

Изменение конфигурации

Вам следует исключить использование директив php_flag и php_value из конфигурации Apache. Вместо этого, изменения могут быть внесены непосредственно в файл php.ini или с использованием функций PHP в вашем коде. Вот как можно это сделать:

  1. Редактирование php.ini: Найдите директивы display_startup_errors, display_errors и html_errors и установите их значения в нужное вам состояние.

    display_startup_errors = Off
    display_errors = Off
    html_errors = Off
  2. Использование PHP-функций: Для более гибкой конфигурации, адаптируйте свой код, используя функции ini_set.

    ini_set('display_startup_errors', '0');
    ini_set('display_errors', '0');
    ini_set('html_errors', '0');
  3. Интеграция Apache и PHP: Убедитесь, что модуль PHP загружен в Apache. Проверьте файл конфигурации Apache (/etc/httpd/conf/httpd.conf или аналогичный), и убедитесь в наличии строки, подключающей PHP-модуль:

    LoadModule php_module modules/libphp.so

Диагностика и устранение ошибок

  1. Проверка конфигурации: Выполните команду apachectl configtest или httpd -t для проверки конфигурации Apache на наличие ошибок.

  2. Журналы ошибок: Изучите журналы ошибок Apache, чтобы детальнее понять причину сбоя.

  3. Обновление wiki-документации: Всегда стоит проверять актуальность документации, такой как на страницах Arch Linux, чтобы соответствовать самым последним рекомендациям.

Заключение

Работая с такими мощными инструментами, как Apache и PHP, конфигурация серверной части требует понимания механизмов взаимодействия и модулей. Устранив проблему с использованием неподдерживаемых команд, система будет более устойчивой и управляемой, соответствуя вашим ожиданиям относительно производительности и функциональности.

Оцените материал
Добавить комментарий

Капча загружается...