1

エラー レポートがオンになっていても、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>
4

3 に答える 3

1

本番環境では、セキュリティ上の理由から、通常のユーザーがアプリにアクセスしている場合、アプリのエラー表示を無効にしています。これは php.ini の設定に関係ありません。

アプリにアクセスしているユーザーがアプリ管理者の 1 人である場合、デバッグに役立つエラーが表示されます。

もちろん、すべてのエラーはリクエスト ログに送信されるため、そこに移動して取得できます。

于 2013-09-10T02:02:45.663 に答える
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(); 、PHP の致命的なエラーをキャッチするにはどうすればよいかによって処理されない可能性があります。

于 2013-08-02T19:59:54.673 に答える
0

アプリケーションの例外が App Engine ログに表示される場合は、 Google Stackdriver Error Reportingを直接使用して、PHP アプリケーションのエラーを一目で確認できます。

App Engine 用に自動構成されるため、セットアップは不要です。

https://console.cloud.google.com/errorsでプロジェクトの Error Reporting にアクセスします。

于 2016-04-06T13:28:55.883 に答える