无法让 PHP 在 Apache VirtualHosting 环境中运行

无法让 PHP 在 Apache VirtualHosting 环境中运行

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

问题是,尽管虚拟主机本身可以工作,而 PHP 则不行

服务器设置:

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

采取的步骤:

用户,

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

文件:/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>
  • 为虚拟主机站点创建新目录

如下图所示,

mkdir -p /srv/www/example.org/public_html
mkdir -p /srv/www/example.org/logs
  • 放置如下的测试文件.php.html

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

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
  • 尝试添加php_admin_flag engine onvhost 配置文件

另请参阅以下内容/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

答案1

根据我的经验,当 PHP 遇到严重的底层错误时,它会呈现空白页。通常很容易修复,但不幸的是,Apache 日志、PHP 日志或 syslog 中通常不会记录任何内容,这让故障排除过程变得困难。

使用以下方法查找 php.ini 配置文件:

php -i | grep "php.ini"

这应该会产生类似这样的结果:

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

使用您喜欢的文本编辑器编辑此配置文件(本例中为 /etc/php.ini),并确保已打开显示错误和启动错误。条目应如下所示:

display_errors = On
display_startup_errors = On

最后重启 Apache,让它读取新的 PHP 配置并通过 curl 或浏览器访问您的页面。这将产生一条错误消息,有助于故障排除过程。

答案2

您应该做的第一件事是检查您在 Apache 配置中设置的 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 下运行,因此弹出的任何错误都会显示在服务器日志中。我建议登录服务器并使用tail如下方法:

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

但这是一般的 Apache 日志吗?还是 DigitalOcean 的配置?因为那个路径/srv/www/example.org/logs/看起来很奇怪。在标准 Linux 下,它应该位于这样的位置:

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

无论日志实际上被发送到哪里,这都是服务器上 PHP 和 Apache 发生或未发生情况的关键。

相关内容