Apache 执行 HTML,但不执行 PHP;PHP CLI 可以工作

geo*_*ser 5 unix php php-cli apache-2.2

我在 rhel 6.2 上使用 Apache 2.2.15 运行 php 5.3.3,但无法让 Apache 解释 PHP 代码。

没有错误(在系统日志、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
Run Code Online (Sandbox Code Playgroud)

然而,当我直接从浏览器(例如 myserver.com/index.php)查看包含以下代码的 index.php 时,除了白屏之外什么都没有出现:

<?php echo 'Hello php World'; ?>
Run Code Online (Sandbox Code Playgroud)

当在命令行上执行 php 时,我得到了终端的预期文本输出(“ Hello php World”)。

当我将一些 HTML 添加到 index.php 时,如下所示:

<html>
    <p>Hello from within html</p>
    <?php echo 'Hello php World'; ?>
</html>
Run Code Online (Sandbox Code Playgroud)

并用我的浏览器查看它,它只返回“ Hello from within html。” 但是,当从命令行执行时,我得到:

<html>
    <p>Hello from within html</p>
    Hello php World</html>
Run Code Online (Sandbox Code Playgroud)

因此,PHP 是通过 CLI 解析和解释的,而不是由 Apache 解析和解释。

我已经确认 index.php 及其父文件结构由 apache:apache 所有,并且 apache 模块的 selinux 上下文:

chcon -t httpd_sys_script_exec_t  /usr/lib/httpd/modules/*
chcon -t httpd_sys_script_exec_t  /usr/lib/php/modules/*
Run Code Online (Sandbox Code Playgroud)

以及要解析的 .php 文件:

chcon -R -h -t httpd_sys_content_t /export1
Run Code Online (Sandbox Code Playgroud)

是正确的。我不认为 selinux 是问题所在,因为我没有收到任何权限错误,并且我暂时禁用了 selinux,echo 0 >/selinux/enforce但 apache 解释 php 没有成功。

php 模块正在加载其配置,并且 .php 扩展名被理解为在 httpd.conf 中配置:

LoadModule php5_module /usr/lib/httpd/modules/libphp5.so
AddType application/x-httpd-php .php .phtml
PHPIniDir /etc/
Run Code Online (Sandbox Code Playgroud)

并且,apache 知道从以下位置查找 index.php:

DirectoryIndex index.html index.html.var index.php
Run Code Online (Sandbox Code Playgroud)

在 httpd.conf 中设置。

我已经用尽了我对问题所在的想法 - 甚至尝试重新安装 PHP - 并且肯定会感激任何想法。如果有用的话,下面是我启动 apache 时 /var/log/httpd/error_log 的内容:

[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
Run Code Online (Sandbox Code Playgroud)

请帮忙!

小智 1

似乎php5_module已经由您自己加载,并稍后由默认rhel6配置加载,或者配置rhel6正在加载模块php5_module...这本身并不重要,除了您输入的配置被默认rhel6配置覆盖这一事实。

查看Dan 网站上的第 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
Run Code Online (Sandbox Code Playgroud)