获取Apache的空白PHP页面

时间:2014-01-13 03:41:25

标签: php apache centos

在新设置的digitalOcean云服务器(CentOS)中,我安装了php和Apache。网络服务器正常运行:

[root@a2m5cent01 httpd]# service httpd status
httpd (pid  11232) is running...
[root@a2m5cent01 httpd]# php --version | head -1
PHP 5.3.3 (cli) (built: Dec 11 2013 03:29:57) 

但是如果我尝试访问任何php页面,浏览器会显示空白页面(白页)。

以下是我到目前为止所做的排除故障的方法:

  1. 创建了一个包含以下内容的页面:<?php phpinfo(); ?>。从浏览器查看时显示空白页。
  2. 为了确保,apache指向正确的目录,在那里放置了一个静态.html页面,并且在浏览器中看到它很好,所以apache正在运行且目录正确。
  3. /etc/php.ini中,将display_errors指令更改为On。仍为空白页
  4. 在Apache配置文件(/etc/httpd/conf/httpd.conf)中找到此行Include conf.d/*.conf。在conf.d目录中,有一个包含以下行的php.conf文件: LoadModule php5_module modules/libphp5.so。确保此.so文件实际存在于此处。
  5. 在同一档案中我也有这两行:AddHandler php5-script .phpAddType text/html .php
  6. 从CLI执行php页面,它工作正常 - 所以php在本地工作。
  7. 那为什么它总是在浏览器上显示空白/白页?我还缺少什么?

    修改 根据@Nathan的建议,

    1. 我检查了Apache错误日志文件,看不到任何错误 在那里报道。
    2. 我的/etc/php.ini说,php error_log位于syslog。所以我检查了/var/log/messages但找不到任何PHP错误消息
    3. 接下来,我在包含HTML调用的php文件中添加了一些正常的phpinfo()。有趣的是,我发现即使是普通的HTML文本也不会出现。 仍然生成空白页。
    4. 然后我检查了Apache access日志。惊喜!我试图在浏览器中加载的任何PHP文件都没有GET请求。但所有非php 文件的 GET 请求都有200个返回码。
    5. Apache 甚至记录PHP文件的任何访问请求。知道为什么会这样吗?

8 个答案:

答案 0 :(得分:15)

查看你的phpinfo()脚本。

<?php
phpinfo();
?>

错过了第一个“?”背后的“php”会给出一个空白页面

答案 1 :(得分:5)

我认为你的apache安装错误。这就是为什么你在网络服务器上看不到任何php页面的原因。清除删除所有现有的应用程序,如httpd,php,php-fpm,php-cli等,并尝试按此顺序清理isntall

yum install httpd -y
yum install php php-common php-cli php-gd php-curl php-fpm -y

然后确保重新启动httpd服务器。

service httpd restart

安装mod_fastcgi:

yum install  mod_fastcgi

启动服务:

service php-fpm start

重启Apache:

service httpd restart

<强> 5。使用PHP-FPM配置Apache

打开fastcgi.conf文件:

nano /etc/httpd/conf.d/fastcgi.conf

将其添加到文件末尾:

<IfModule mod_fastcgi.c>
                DirectoryIndex index.html index.shtml index.cgi index.php
                AddHandler php5-fcgi .php
                Action php5-fcgi /php5-fcgi
                Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php5-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule>

在“FastCgiWrapper”之后搜索并确保将其设置为“off”然后保存文件。

/ usr / lib / cgi-bin /目录必须存在,因此我们创建它:

mkdir /usr/lib/cgi-bin/ 

如果安装并启用了mod_php,我们需要将其禁用,以便在/etc/httpd/conf.d/php.conf中打开配置:

nano /etc/httpd/conf.d/php.conf

注释掉AddHandler和AddType行,使其如下所示:

#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
  LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
  LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
#AddHandler php5-script .php
#AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps

保存文件并重新启动Apache:

service httpd restart

答案 2 :(得分:1)

您是否直接导航到php文件?或者你只是去目录根目录?

如果是后者,Apache可能没有将.php识别为目录索引。

要进行测试,请尝试在Web根目录中创建一个包含以下行的.htaccess文件:

DirectoryIndex index.php

答案 3 :(得分:1)

我有同样的问题...... 问题出在iptables中。 (好像是

尝试:

service iptables stop
## check if it stop...
service iptables status

然后尝试重新加载页面。

如果您有其他解决方案,请分享。

[修改] 重新启动iptables服务对我有用。

尝试:

service iptables restart

答案 4 :(得分:1)

首先,您应该检查文件的权限。 如果您不向公众授予读取权限,Apache会生成一个空白页面而不显示任何错误。

答案 5 :(得分:0)

由于所有内容都处于默认状态,您是否已将此部分选中以进行确认

cat /etc/php.ini | grep log_errors

如果禁用了log_errors,则启用它并在重新启动httpd后检查以下日志。 /var/log/httpd/error_log

- 另请从php配置中检查此部分。
cat /etc/php.ini | grep error_reporting

默认情况下应启用此值,以便display_errors可用。
error_reporting = E_ALL

答案 6 :(得分:0)

很抱歉重新发布旧帖...这很重要。

我也遇到了没有html响应输出的问题

在仔细检查php.ini或我的apache conf文件并且仍然没有收到输出之后,我后来发现我正在使用@来抑制包含/要求类的错误,这是嵌套在构造函数中。包含文件中存在语法错误,在抛出错误时会完全停止所有输出。

因此,请先检查您的处理程序。 如果您首先将所有输出存储到vars中,并且首先包含各种脚本,那么您将不得不看到这些错误。如果您抑制文件处理程序错误,如果文件中存在语法错误,则会出现空白屏幕。

在您的文件中搜索PHP代码中@的所有实例。然后将@include "/path_to/script.php";转换为include "/path_to/script.php";或将任何@$foo转换为$foo,因为这样的var可能会引用一个依赖项,导致脚本以httpd错误日志中显示的内容结束http响应。

答案 7 :(得分:0)

已经有一段时间了,但是我想回到这个问题来更新问题在于目录权限设置。

我使用的FPM用户没有执行Web根目录中的index.php文件所必需的权限。

为避免将来出现这些问题,我创建了一个自动化的bash脚本,该脚本将在DigitalOcean框中自动创建和配置Web服务器。请在这里https://github.com/akash-mitra/fairy

看看

此脚本将自动

  • 安装Nginx
  • 为nginx创建虚拟服务器块
  • 安装PHP,PHP APC,PHP Curl等。
  • 支持PHP快速过程管理器(php-fpm)
  • 安装Memcached
  • 安装数据库(MariaDB / MySQL)
  • 可选地安装PHP Composer和Laravel
  • 配置并加强SSH
  • 激活防火墙
  • (可选)在DO服务器中启用SWAP空间并修复语言环境问题