Вопрос или проблема
Я пытаюсь настроить 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 в вашем коде. Вот как можно это сделать:
-
Редактирование
php.ini
: Найдите директивыdisplay_startup_errors
,display_errors
иhtml_errors
и установите их значения в нужное вам состояние.display_startup_errors = Off display_errors = Off html_errors = Off
-
Использование PHP-функций: Для более гибкой конфигурации, адаптируйте свой код, используя функции
ini_set
.ini_set('display_startup_errors', '0'); ini_set('display_errors', '0'); ini_set('html_errors', '0');
-
Интеграция Apache и PHP: Убедитесь, что модуль PHP загружен в Apache. Проверьте файл конфигурации Apache (
/etc/httpd/conf/httpd.conf
или аналогичный), и убедитесь в наличии строки, подключающей PHP-модуль:LoadModule php_module modules/libphp.so
Диагностика и устранение ошибок
-
Проверка конфигурации: Выполните команду
apachectl configtest
илиhttpd -t
для проверки конфигурации Apache на наличие ошибок. -
Журналы ошибок: Изучите журналы ошибок Apache, чтобы детальнее понять причину сбоя.
-
Обновление wiki-документации: Всегда стоит проверять актуальность документации, такой как на страницах Arch Linux, чтобы соответствовать самым последним рекомендациям.
Заключение
Работая с такими мощными инструментами, как Apache и PHP, конфигурация серверной части требует понимания механизмов взаимодействия и модулей. Устранив проблему с использованием неподдерживаемых команд, система будет более устойчивой и управляемой, соответствуя вашим ожиданиям относительно производительности и функциональности.