在新设置的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页面,浏览器会显示空白页面(白页)。
以下是我到目前为止所做的排除故障的方法:
<?php phpinfo(); ?>
。从浏览器查看时显示空白页。.html
页面,并且在浏览器中看到它很好,所以apache正在运行且目录正确。/etc/php.ini
中,将display_errors
指令更改为On
。仍为空白页/etc/httpd/conf/httpd.conf
)中找到此行Include conf.d/*.conf
。在conf.d
目录中,有一个包含以下行的php.conf
文件:
LoadModule php5_module modules/libphp5.so
。确保此.so文件实际存在于此处。AddHandler php5-script .php
和AddType text/html .php
那为什么它总是在浏览器上显示空白/白页?我还缺少什么?
修改 根据@Nathan的建议,
/etc/php.ini
说,php error_log位于syslog
。所以我检查了/var/log/messages
但找不到任何PHP错误消息HTML
调用的php文件中添加了一些正常的phpinfo()
。有趣的是,我发现即使是普通的HTML文本也不会出现。 仍然生成空白页。access
日志。惊喜!我试图在浏览器中加载的任何PHP文件都没有GET
请求。但所有非php 文件的 GET 请求都有200个返回码。 Apache 不甚至记录PHP文件的任何访问请求。知道为什么会这样吗?
答案 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
看看此脚本将自动