【问题标题】:Getting blank PHP page over Apache通过 Apache 获取空白 PHP 页面
【发布时间】:2014-01-31 17:44:48
【问题描述】:

在新设置的 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 在本地工作。

那为什么它总是在浏览器上显示一个空白页面?我还缺少什么?

编辑 根据@Nathan 的建议,

  1. 我检查了 Apache 错误日志文件,看不到任何错误 在那里报道。
  2. 我的/etc/php.ini 说,php error_log 位于syslog。所以我检查了/var/log/messages,但找不到任何PHP错误消息
  3. 接下来我将一些普通的HTML 放入包含phpinfo() 调用的php 文件中。有趣的是,我发现即使是普通的 HTML 文本也不会出现。它仍然产生空白页。
  4. 然后我检查了 Apache access 日志。惊喜!我试图在浏览器中加载的任何 PHP 文件都没有 GET 请求。但是对所有 non-php 文件的 GET 请求都存在 200 返回码。

Apache 甚至记录任何对 PHP 文件的访问请求。知道为什么会这样吗?

【问题讨论】:

  • @Dagon 我以为我在问题的第一段中回答了这个问题。是的。
  • 您确认您的 http/php 错误日志显示没有消息吗?也为了踢我会在 phpinfo() 之前和之后添加一些 HTML 以确认页面正在加载但 PHP 没有运行。
  • @Nathan 好点!我已经用详细信息更新了我的问题。显然 Apache 甚至没有为 php 文件注册任何 GET 请求......
  • 有趣的是请求没有被记录。你还记得你运行了哪些命令和/或你使用了哪些软件包来安装 PHP?或者运行yum list installed | grep "php" | less 来查看安装了哪些 PHP 包可能更容易。
  • php 肯定没有配置 apache。我的 vps 也遇到过这个问题。

标签: php apache centos


【解决方案1】:

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

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

为了避免将来出现这些问题,我创建了一个自动 bash 脚本,它将自动在 DigitalOcean 盒子中创建和配置网络服务器。请看这里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 空间并修复区域设置问题

【讨论】:

    【解决方案2】:

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

    我也遇到了这些问题,没有输出 html 响应

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

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

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

    【讨论】:

    • 仅供参考,您永远不需要证明发布答案的合理性。这些不是线程。它们只是问题和答案。
    • 我确信我没有伤害任何人的感情
    【解决方案3】:

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

    【讨论】:

    • 这应该是一条评论。
    【解决方案4】:

    检查你的 phpinfo() 脚本。

    <?php
    phpinfo();
    ?>
    

    缺少第一个“?”后面的“php”将给出一个空白页

    【讨论】:

    • 关于我的问题的第一点,我已经提到了这一点。您仍然建议相同。
    • 为什么我一遍又一遍地犯这个错误?
    【解决方案5】:

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

    尝试:

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

    然后尝试重新加载页面。

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

    [编辑] 重新启动 iptables 服务对我有用。

    试试:

    service iptables restart
    

    【讨论】:

    • 是什么让你认为是 iptables?
    【解决方案6】:

    我认为您使用 apache 安装的 php 有问题。这就是为什么您在您的网络服务器中看不到任何 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”之后搜索并确保将其设置为“关闭”,然后保存文件。

    /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
    

    【讨论】:

    • 我会尝试用 fast-cgi 重新安装。请稍等,我会更新你。
    • 它看起来像是 DO CentOS 6.5 映像中的一个错误。降级到 6.4 解决了这个问题。
    • 哦。我在安装 LAMP 时碰巧使用了 Centos 6.4。很高兴您的问题得到解决。
    • 在我的fedora 26盒子里,安装了mod_php(yum -y install mod_php)来解决黑屏问题。
    【解决方案7】:

    由于一切都处于默认状态,您是否检查过这部分只是为了确认

    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

    【讨论】:

    • log_errors = Onerror_reporting = E_ALL &amp; ~E_DEPRECATED
    【解决方案8】:

    您是直接导航到 php 文件吗?还是直接进入根目录?

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

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

    DirectoryIndex index.php
    

    【讨论】:

    • 感谢您的回复,但请避免在回答部分提问。为此使用注释。是的,我将直接进入 .php 文件,此外,DirectoryIndex 已经设置好了。
    • 抱歉,评论显然需要 50 声望,你可以看到我还没有。
    猜你喜欢
    • 2017-05-23
    • 1970-01-01
    • 2011-11-14
    • 2015-10-14
    • 1970-01-01
    • 2019-08-24
    • 2013-07-08
    • 1970-01-01
    • 2012-07-19
    相关资源
    最近更新 更多