如何在GAE中向Web浏览器显示php错误?

时间:2013-08-02 19:21:29

标签: php google-app-engine error-handling

即使启用了错误报告,Google App Engine中的错误也会被抑制并且不会显示在浏览器中。通常显示在浏览器中的html显示在日志文件中。

以下代码应生成错误

<?php
  error
  phpinfo();
?>

卷曲页面时,不会返回任何内容,只返回500响应代码。

$ curl -i http://localhost/test.php

HTTP/1.1 500 Internal Server Error
Content-Type: text/html
Cache-Control: no-cache
Expires: Fri, 01 Jan 1990 00:00:00 GMT
Content-Length: 0
Server: Development/2.0
Date: Fri, 02 Aug 2013 18:24:49 GMT

此应用程序的php.ini有display_errors = On,phpinfo会在应用程序内正确显示。

预期的行为就像这样输出

$ php-cgi54 test.php 

X-Powered-By: PHP/5.4.14
Content-type: text/html

<br />
<font size='1'><table class='xdebug-error xe-parse-error' dir='ltr' border='1' cellspacing='0' cellpadding='1'>
<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Parse error: syntax error, unexpected 'phpinfo' (T_STRING) in /Users/example/test/test.php on line     <i>3</i></th></tr>
</table></font>

3 个答案:

答案 0 :(得分:1)

在生产中,出于安全原因,如果普通用户正在访问该应用,我们会禁用该应用的错误。这与php.ini设置无关。

如果访问应用程序的用户是其中一个应用程序管理员,那么我们将显示错误以帮助您进行调试。

当然,所有错误都会发送到请求日志,因此您可以去那里并检索它们。

答案 1 :(得分:0)

我不确定GAE是否会通过正常的php指令允许这样做。

您可以通过以下方式绕过它:

<?php
function display_error($errno, $errstr, $errfile, $errline, $errcontext) {
  //echo desired info here
  die();
}

set_error_handler("display_error");
?>

GAE可能会阻止这一点,但尝试一下就很容易

修改

有关致命错误的更多信息,因为这是您在问题中描述的错误类型,可能无法由set_error_handler();处理 How do I catch a PHP Fatal Error

答案 2 :(得分:0)

如果您的应用程序例外应出现在您的App Engine日志中,您可以直接使用Google Stackdriver Error Reporting一目了然地查看PHP应用程序的错误。

不需要进行任何设置,因为它是为App Engine自动配置的。

https://console.cloud.google.com/errors

为您的项目访问错误报告