无法使PHP在Apache VirtualHosting环境中工作

尝试在DigitalOcean云服务器下的新创build的CentOS节点中使用PHP设置Apache VirtualHosting环境。

麻烦的是,虽然虚拟主机本身是工作的,PHP不是

服务器设置:

  • Web服务器:与Apache / 2.2.15的CentOS 6.5
  • PHP版本:5.3.3(用作Apache模块)

所采取的步骤:

root用户身份login,

  • 安装Apache和PHP: yum -y install httpd php
  • 创build一个新的虚拟主机configuration文件,如下所示:

文件: /etc/httpd/conf.d/vhosts.conf

 NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] ServerName example.org ServerAlias www.example.org DocumentRoot /srv/www/example.org/public_html/ ErrorLog /srv/www/example.org/logs/error.log CustomLog /srv/www/example.org/logs/access.log combined </VirtualHost> 
  • 为虚拟主机站点创build新的目录

如下所示,

 mkdir -p /srv/www/example.org/public_html mkdir -p /srv/www/example.org/logs 
  • 放置一个.php.htmltesting文件,如下所示:

/srv/www/example.org/public_html/ )下的文件

 echo "<HTML>It work's</HTML>" > /srv/www/example.org/public_html/index.html echo "<?php echo ("It works"); ?>" > /srv/www/example.org/public_html/index.php 

接下来,当我将浏览器指向index.html ,它可以正常工作。 但是当我将浏览器指向index.php我得到一个空白页面

故障排除

(我已经做了/检查没有任何运气)

  • 确保Apache正在运行,可以访问DocumentRoot
  • 所有的目录是755和文件644
  • 检查Apache访问日志。 这个html页面请求有200个状态码,但是在访问日志中没有.php页面请求
  • 在Apache或PHP错误日志中没有错误,在/var/log/messages没有错误
  • 尝试在vhostconfiguration文件中添加php_admin_flag engine on

另请参阅下面的/etc/httpd/conf.d/php.conf的内容

 <IfModule prefork.c> LoadModule php5_module modules/libphp5.so </IfModule> <IfModule worker.c> LoadModule php5_module modules/libphp5-zts.so </IfModule> AddHandler php5-script .php AddType text/html .php DirectoryIndex index.php 

根据我的经验,当PHP遇到严重的潜在错误时会呈现空白页面。 通常很容易修复,但不幸的是,Apache日志,PHP日志或系统日志中通常没有logging任何内容,这使得故障排除过程变得困难。

find你的php.iniconfiguration文件使用:

 php -i | grep "php.ini" 

这应该产生这样的事情:

 Configuration File (php.ini) Path => /etc Loaded Configuration File => /etc/php.ini 

用你最喜欢的文本编辑器编辑这个configuration文件(在这种情况下为/etc/php.ini),确保显示错误和启动错误。 条目应该是这样的:

 display_errors = On display_startup_errors = On 

最后重新启动Apache,以便读取新的PHPconfiguration并通过curl或浏览器访问您的页面。 这应该会产生一个错误消息,这将有助于在故障排除过程。

你应该做的第一件事是检查你在Apacheconfiguration中设置的Apache错误日志; 复制如下:

 NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] ServerName example.org ServerAlias www.example.org DocumentRoot /srv/www/example.org/public_html/ ErrorLog /srv/www/example.org/logs/error.log CustomLog /srv/www/example.org/logs/access.log combined </VirtualHost> 

PHP在Apache下运行,所以任何popup的错误都会显示在服务器日志中。 我build议login到服务器和使用tail像这样:

 tail -f -n 200 /srv/www/example.org/logs/error.log 

但那是一般的Apache日志吗? 或者是DigitalOcean的configuration? 因为/srv/www/example.org/logs/path似乎很奇怪。 在标准的Linux下,它将处于如下位置:

 tail -f -n 200 /var/log/apache2/error.log 

不pipe实际发送日志的位置如何,这将成为服务器上PHP和Apache发生或不发生的关键。