3

mysql_MySQLi が利用できない場合など、関数のカスタム ラッパーを作成しています。接続できない場合は、例外がスローされます。ただし、致命的なエラー出力は次のとおりです。

致命的なエラー:メッセージ「データベースへの接続に失敗しました」の例外「例外」をキャッチできませんでした。in C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php:16

スタック トレース:

#0 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.php(49): MySQL->__construct('localhost', 'miniticket', 'mtu:r!Nj@~qR6f9...')
#1 C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\index.php(3): require_once('C:\Program File...')
#2 {main} がC:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\MiniTicket\database.phpでスローされる16行目

ご覧のとおり、私のデータベースのパスワードは誰にでも見えるように明確に表示されています。良くない。特に開発中は、これらのメッセージをオフにしたくありませんが、機密情報も表示したくありません。set_error_handlerすべてを解析する必要があり、エラーが発生しやすいため、使用も優れたソリューションではありません。

それで...エラーメッセージ内の関数のパラメータの表示を無効にする簡単な方法はありますか?

編集:ファイル名以外のファイルパスを無効にすることもおまけです。

4

2 に答える 2

1

開発ではエラー情報が表示され、本番では分かりやすいエラー メッセージが表示されますが、PHP では何も出力されません。代わりに出力をファイルに記録します。

于 2011-12-05T04:23:29.357 に答える
1

php.ini を編集して設定します

display_errors = 0

php.ini にアクセスできない場合は、スクリプトの先頭に次を追加する必要があります。

ini_set("display_errors", "0");

http://php.net/manual/en/errorfunc.configuration.phpおよびhttp://php.net/manual/en/function.error-reporting.phpを参照してください。

これにより、すべてのエラーがブラウザに出力されなくなります。おそらく、本番システムでのみ実行する必要があります。エラーをログに記録していることを確認してください (php.ini 設定を使用)。

この状況が実稼働環境で発生しないように、これがデフォルト構成ではない理由がわかりません。

ただし、これをソフトウェアの問題の解決策として扱わないでください。これは、機密データが一般に公開されるのを防ぐことを目的としています。

php.ini の変更を有効にするには、Apache を再起動する必要がある場合があることに注意してください。

于 2011-12-05T04:46:13.930 に答える