PHP白屏死机


php white screen of death

我浏览了其他几个问题,并尝试了与错误报告相关的各种解决方案,包括

ini_set('display_errors',true);
error_reporting(E_ALL);

但我仍然被死机的白屏所困。这似乎只发生在我使用自己的面向对象类的页面上。但是,OOP 脚本成功执行,但我无法显示 HTML。有时,我可以让它捕获异常,但它是间歇性的。

例如,我有一个这样的方法:

public function getSubdomain() {
        $this->data->query('SELECT * FROM users WHERE email=:email');
        $this->data->bind(':email', $this->email);
        $this->data->execute();
        if($this->data->rowCount() == 0)
            throw new Exception('There is no account associated with this e-mail address.');
        $curr = $this->data->single();
        return $curr['subdomain'];
    }

^^ 这将执行得很好,我可以使用它使用 die($curr['subdomain']); 从 OOP 类打印,但如果我尝试使用 PHP 在页面上显示它,什么都没有。没有错误,所以日志,没有源代码,绝对没有。

我正在使用 Apache 的 MultiViews,我的数据库查询是使用自定义 PDO 类完成的。

我已经跑了

# php -l new.php

直接在服务器上进行报告

No syntax errors detected in new.php

当我在本地运行完全相同的 WAMP 设置时,它可以正常工作,但是一旦我迁移到我的 CentOS/Apache/PHP 机器,一切都崩溃了。MySQL在单独的服务器上,但没有问题。

我可以根据需要提供更具体的代码(我自己的和来自服务器的 conf 文件),我只是想避免由于问题的性质而出现任何任意操作。关于从这里开始的任何建议(即,不同的错误报告方法等)?

大多数时候,当我们从 WAMP 移动到 LAMP 时出现错误时,这是一个区分大小写的问题。由于Windows不是CS,但Linux可以破坏很多。

我会:

  • 检查正在起作用的类/页面上的案例
  • 检查 .htaccess 规则(或暂时删除它们)以检查是否存在错误

我也遇到过几次PHP的白屏死机。根据我的经验,您可以做的最有用的事情之一是确保 PHP 使用 php.ini 中的 error_log 指令记录到文件:http://us1.php.net/manual/en/errorfunc.configuration.php#ini.error-log

如果在定义的 PHP 错误日志或 Apache 错误日志中仍然看不到任何有用的信息,则可能是时候通过代码添加调试输出以确定发生致命错误的点了。 为此,您可以打开文件句柄并定期自己写入,或者仅使用 error_log() 函数输出调试消息。