3

我有一个 IIS 服务器,它通过 fastcgi 为 PHP 提供服务。当错误日志文件由 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,或者您可以停止登录 schedule_task。

于 2013-02-26T11:01:13.573 回答
1

编辑php.ini,找到这一行并编辑:

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

并确保将 display_errors 更改为关闭:

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 以记录到 Windows 事件日志(在您的 php.ini 中):

error_log = syslog
于 2013-02-21T19:28:15.630 回答