3

fastcgi 経由で PHP を提供する IIS サーバーがあります。エラー ログ ファイルが IIS_IUSRS グループ (IIS ユーザーが実行されているグループ) 以外のユーザーによって書き込まれると、ファイルは IIS によって書き込み不能になり、PHP 呼び出しerror_log()によって 500 エラーが発生します。(少なくとも、ログファイルを削除すると、エラーが消えてログファイルが再作成されるように見えると思います)。

500エラーの発生を止める方法はありますか?

編集:明確にするために、ロギングを停止したり、イベントログに記録したり、別の場所に記録したりすることでこれを停止できることはわかっていますが、それは私が言いたいことではありません。つまり、500 エラーを防止したいだけです。システムがサイトを壊そうとしたときにログに記録できないことは気にしません。それはまさに最悪の行動です。500 エラーが発生しないようにして、サイトが引き続き機能することを望んでいます。

4

5 に答える 5

2

スケジュールされたタスクは実際にエラー ログ ファイルのアクセス許可を変更しているため、実行可能なオプションは次のとおりです。

1) スケジュールされたタスクが error_log に書き込まれないようにします。cron ジョブの先頭に次を追加します。

error_reporting(E_NONE);

2) スケジュールされたタスク (PHP ファイル) の開始時に次のコマンドを発行して、スケジュールされたタスクがシステム ログ (Windows のイベント ビューア) に書き込まれるようにします。

ini_set('error_log', 'syslog');

3) 上記のすべてがあなたに合わない場合は、IIS ユーザー/グループとしてタスクをスケジュールしてみてください。これにより、アクセス許可が満たされ、エラー 500 が発生しなくなります。

これを修正する魔法はありません。スケジュールされたタスクを変更して、PHP プロセスと同じ UID/GID を持つようにするか、scheduled_task でのログ記録を停止することができます。

于 2013-02-26T11:01:13.573 に答える
1

php.iniを編集し、次の行を見つけて編集します。

error_log = /your/website/path/to/log

そして、必ず display_errors を off に変更してください:

display_errors = off

chmod 777 をファイルに入れることを忘れないでください:)。ブラウザでファイルを見たい場合は、次のようなものを .htaccess ファイルに入れることができます:

<Files /your/site/path/to/log/file.log>
    allow from 10.0.1.1/16
    deny from all
</Files>

PS: 申し訳ありませんが、表記が ISS サーバーであることがわかりません...うーん、おそらく ISS の error_log でエラーに関する詳細情報を表示できます (どこにあるのかわかりません)

于 2013-02-22T03:59:20.673 に答える
1

私はこれを経験しました。error_log がファイルに対して大きすぎる可能性があります。たとえば、error_log が 16mb に達すると、サーバーはエラー 500 をスローします。error_log を削除して、まだそのエラーがスローされるかどうか試してみてください。error_logs パーミッションと所有権も確認したいかもしれません。

于 2013-02-23T05:58:56.493 に答える
1

error_log 関数が 500 Internal Server Error をスローするのを回避したい!

その場合は、error_log への呼び出しの先頭に「@」を追加してみましたか。これにより、エラーが抑制される可能性があります。頑張って元に戻してください!:)

于 2013-02-26T17:58:23.773 に答える
0

error_log()を使用して、別のパスにアプリケーションログを書き込むことができます。

error_log("Some fancy error to log", 3, "c:\tmp\your-custom-errors.log");

または、(php.ini内の)Windowsイベントログに記録するようにphpを構成することもできます。

error_log = syslog
于 2013-02-21T19:28:15.630 に答える