22

我希望 PHP 在屏幕上显示解析错误。我得到的是一个空白页。没有任何内容被写入服务器的错误日志文件。

我的设置:PHP5.2.9/ IIS 6(不是 Apache!)。

我的 PHP.INI:

error_reporting=E_STRICT
display_errors = On
display_startup_errors = On
log_errors = On
error_log = "C:\Program Files\Zend\ZendServer\logs\php_error.log"

如何在屏幕上记录或显示解析或致命错误?

谢谢, Temuri

更新:使用不同的开关后,它看起来是一个 IIS 特定的问题。有什么想法吗?

4

8 回答 8

16

在 php 文件本身中设置错误级别并不能解决这里的问题,因为文件本身无法解析!

您需要更改 php.ini 中的 error_reporting 行,如下所示:

error_reporting = E_ALL

顺便说一句:在 php.ini 文件中有一些关于如何显示哪种类型的错误消息的示例。

祝你好运,

麦克莫兹

于 2009-06-02T21:39:46.093 回答
5

Apache 也不总是喜欢报告解析错误。从命令行,运行

php -l <file>

-l 开关告诉 PHP 检查文件语法。请参阅手册页。

于 2009-06-02T20:40:37.007 回答
3

E_STRICT不包含在E_ALL(直到 PHP 6)。如果你想继续获得E_STRICT

在 php.ini 中:

error_reporting = E_ALL | E_STRICT

在运行时:

error_reporting( E_ALL | E_STRICT );

您需要在 php.ini 中设置错误报告级别(和display_errors)以查看语法错误。如果 PHP 遇到语法错误,运行时不会被执行,因此在运行时设置将不起作用。(见display_errors链接。)

于 2009-06-02T23:00:47.443 回答
2

您可以在终端中使用此命令验证脚本语法:

php -l path/to/file.php

就个人而言,我将此行添加到我的~/.bash_profile文件中,以便我可以轻松地php -l在当前工作目录中的所有文件上运行:

phpl() { for i in *.php; do php -l $i; done }

如果你真的是铁杆,你甚至可以从命令行运行你的应用程序。您将有更好的机会看到编译时错误,这有点酷。

您可以使用 $argv 变量来获取第一个参数 $argv[1],然后将其用作请求。

<?php
// show those errors!
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);

// simulate a web server request
$request = '/' . isset($argv[1]) ? ltrim($argv[1], '/') : '/';
$_SERVER['PATH_INFO'] = $_SERVER['REQUEST_URI'] = $request;

然后你可以通过命令行运行你的脚本。这相当于访问: your-webapp.com/request/uri/here

php /path/to/script.php request/uri/here

这是通过命令行运行 CodeIgniter 的更全面的示例。它也应该适用于许多其他框架: http: //phpstarter.net/2008/12/run-codeigniter-from-the-command-line-ssh/

于 2012-01-02T07:51:25.980 回答
1

正如 Rasmus Lerdorf 建议的那样,始终在开发服务器上使用 error_reporting(-1)。

于 2012-08-20T11:45:36.960 回答
0

如果您正在使用 Zend Framework (v1) 并且正在使用 Autoloader,则以下代码将防止显示解析错误:

self::$Autoloader->suppressNotFoundWarnings(true);

有关详细信息,请参阅以下答案:

使用 Zend 框架时显示 php 错误

于 2014-08-08T13:43:39.293 回答
0

Re: php死机黑屏死机,我发现那个设置

php_value error_reporting "E_ALL" 或 php_value error_reporting 8192

在我的 Windows 7 上的 .htaccess 中,带有 apache 2.2.4 和 php 5.3.13 的 Wampserver 是获得空白 php 错误屏幕的肯定方法——今天,2014 年 6 月 3 日。这些 htaccess 行确实在 phpinfo( ),但只有在 htaccess 中注释掉(未使用)该行时才会显示错误。

但是……下一分钟我发现

php_value error_reporting 8191

确实设置了 phpinfo() 值并且还允许向浏览器显示错误消息!哦!它必须是一个整数,而且显然也是一个特定或有效的整数,而不仅仅是一个足够大的整数!

于 2014-06-04T04:29:01.453 回答
-1

尝试这个。

error_reporting(E_ALL);
ini_set("display_errors", 1);
于 2009-06-02T20:39:20.583 回答