Назад | Перейти на главную страницу

Apache выполняет HTML, но не PHP; PHP CLI работает

Я запускаю php 5.3.3 на rhel 6.2 с Apache 2.2.15, и мне не удается получить PHP-код, интерпретируемый Apache.

Ошибок нет (в системном журнале, httpd / error_log или php_errors.log) - я включил отчет об ошибках в php.ini:

error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On
log_errors = On
error_log = /var/log/php_errors.log

Тем не менее, когда я просматриваю свой index.php, содержащий следующий код, прямо из моего браузера (например, myserver.com/index.php), ничего не появляется, кроме белого экрана:

<?php echo 'Hello php World'; ?>

При выполнении php в командной строке я получаю ожидаемый текстовый вывод на терминал ("Hello php World").

Когда я добавляю HTML в index.php, как в:

<html>
    <p>Hello from within html</p>
    <?php echo 'Hello php World'; ?>
</html>

и просмотрите его в моем браузере, он вернет просто "Hello from within html. "Однако при выполнении из командной строки я получаю:

<html>
    <p>Hello from within html</p>
    Hello php World</html>

Итак, PHP анализируется и интерпретируется через CLI, но не через Apache.

Я подтвердил, что index.php и его родительская файловая структура принадлежат apache: apache и что контекст selinux модулей apache:

chcon -t httpd_sys_script_exec_t  /usr/lib/httpd/modules/*
chcon -t httpd_sys_script_exec_t  /usr/lib/php/modules/*

и анализируемых файлов .php:

chcon -R -h -t httpd_sys_content_t /export1

верны. Я не думаю, что проблема в selinux, потому что у меня нет ошибок с правами доступа, и я временно отключил selinux echo 0 >/selinux/enforce без всякого успеха интерпретации php Apache.

Модуль php загружается с его конфигурацией, а расширение .php понимается как настроенное в httpd.conf:

LoadModule php5_module /usr/lib/httpd/modules/libphp5.so
AddType application/x-httpd-php .php .phtml
PHPIniDir /etc/

И apache знает, что искать index.php из:

DirectoryIndex index.html index.html.var index.php

как установлено в httpd.conf.

Я исчерпал свои идеи о том, где моя проблема - даже попытался переустановить PHP - и, конечно, буду признателен за любые идеи. В случае использования, вот содержимое / var / log / httpd / error_log, когда я запускаю apache:

[Fri Feb 03 13:44:53 2012] [notice] SELinux policy enabled; httpd running as context unconfined_u:system_r:httpd_t:s0
[Fri Feb 03 13:44:53 2012] [notice] suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Fri Feb 03 13:44:53 2012] [warn] module php5_module is already loaded, skipping
[Fri Feb 03 13:44:53 2012] [notice] Digest: generating secret for digest authentication ...
[Fri Feb 03 13:44:53 2012] [notice] Digest: done
[Fri Feb 03 13:44:54 2012] [warn] mod_wsgi: Compiled for Python/2.6.2.
[Fri Feb 03 13:44:54 2012] [warn] mod_wsgi: Runtime using Python/2.6.6.
[Fri Feb 03 13:44:54 2012] [notice] Apache/2.2.15 (Unix) DAV/2 PHP/5.3.3 mod_ssl/2.2.15 OpenSSL/1.0.0-fips mod_wsgi/3.2 Python/2.6.6 mod_perl/2.0.4 Perl/v5.10.1 configured -- resuming normal operations

Пожалуйста помоги!

Кажется, что php5_module уже загружен вами и загружается позже по умолчанию rhel6 конфигурация или конфигурация на rhel6 загружает модуль php5_module... что само по себе не имеет значения, за исключением того факта, что конфигурация, которую вы вводите, переопределяется по умолчанию rhel6 конфигурация.

Глядя на шаг 11 из Сайт Дэна, который работал у меня в прошлом, когда я забывал и нуждался в быстром напоминании:

# Make sure there's only **1** line for each of these 2 directives:

# Use for PHP 4.x:
#LoadModule php4_module modules/libphp4.so
#AddHandler php-script .php

# Use for PHP 5.x:
LoadModule php5_module modules/libphp5.so
AddHandler php5-script .php 

# Add index.php to your DirectoryIndex line:
DirectoryIndex index.html index.php

AddType text/html .php

# PHP Syntax Coloring
# (optional but useful for reading PHP source for debugging):
AddType application/x-httpd-php-source phps

Для меня проблема заключалась в том, что мод не был включен в apache2.

Чистая установка Debian, apache2 и php7

Сначала мне пришлось отключить мод mpm_event, который был включен по умолчанию, я не знаю почему. Кстати, mpm - очень чистый способ использования PHP, вы должны рассмотреть его вместо мода apache2;) ​​Но что ж, для быстрой работы:

# a2dismod mpm_event
# a2enmod php7.0
# systemctl restart apache2

сделали свое дело :)

наслаждаться

У меня была аналогичная проблема, и я наконец исправил ее, установив short_open_tag = On в /etc/php.ini. Остерегайтесь файлов конфигурации по умолчанию при обновлении!

Сказав что-то очевидное для меня, вы никогда не указали, как вы пытаетесь получить доступ к файлу примера. Вы получаете доступ index.php прямо (т.е. http://example.com/folder/index.php)?

Если нет, обратите внимание, что если есть index.html он будет вызываться вместо этого из-за порядка индексации каталогов:

DirectoryIndex index.html index.html.var index.php

Наконец, это следует спрашивать на serverfault.com, а не здесь.