2013-08-02 94 views
1

即使錯誤報告處於打開狀態,Google App Engine中的錯誤也會被抑制並且不會顯示給瀏覽器。通常顯示給瀏覽器的html會顯示在日誌文件中。如何在GAE中的Web瀏覽器中顯示php錯誤?

下面的代碼應該產生一個錯誤

<?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> 
+0

不知道是否有可能在GAE項目,但爲什麼你要顯示的錯誤直接輸出,而不是下面的日誌?當前的行爲對於安全性更好,而使用日誌仍然可以相對容易地進行調試。 –

+0

我可能會爲了生產而關閉它,但使用SDK開發環境進行本地開發會非常好。 –

回答

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

1

在生產中,出於安全原因,我們禁止爲您的應用程序顯示錯誤(如果它由普通用戶訪問)。這與php.ini設置無關。

如果訪問該應用程序的用戶是應用程序管理員之一,那麼我們將顯示錯誤以幫助您進行調試。

當然,所有的錯誤都發送到請求日誌,所以你可以去那裏檢索它們。

+0

什麼定義生產與發展?我有我的本地開發服務器上運行此代碼,然後運行在appspot上的副本。從你說的話,從appspot調用時不應該顯示錯誤。 '打印「應用程序ID:」。 $ _SERVER ['APPLICATION_ID']。 「\ n」 個; 打印「服務器:」。 $ _SERVER ['SERVER_SOFTWARE']。 「\ n」 個; 打印「是管理員:」。 $ _SERVER ['USER_IS_ADMIN']。 「\ n」 個; 打印「顯示錯誤?」。ini_get('display_errors')。 「\ n」 個; $ test = null; $ foo = array_merge($ test,$ test);' 當捲曲本地和appspot頁面時,顯示錯誤。這裏是[回覆](http://pastebin.com/XmME1sZ2) –

+0

我發現PHP異常有時被表示爲對象,在其他時間表示爲字符串(在stackdriver日誌中顯示),您是否有任何建議獲取所有的Exception對象PHP例外? (我更喜歡使用Exception對象而不是字符串,因爲對象具有更多信息,即使日誌中有很多由字符串表示的異常) –

相關問題