PHP - 尝试使用error_log()进行日志记录导致500错误

时间:2012-12-04 13:31:48

标签: php iis permissions

我有一个通过fastcgi服务PHP的IIS服务器。 当IIS_IUSRS组(IIS用户正在运行的组)中的用户写入错误日志文件时,IIS将无法写入该文件,并且对error_log()的PHP调用将导致500错误。 (至少那是我的猜测,好像我删除了日志文件,错误消失并重新创建了日志文件)。

无论如何我可以阻止500错误发生吗?

编辑:要清楚我知道我可以通过停止记录,记录到事件日志或不同位置等来阻止这种情况,但这不是我的意思。我的意思是我只是想防止500错误,我不在乎我的系统无法记录它应该在尝试时破坏网站。这正是它可能产生的最糟糕的行为。我只是希望500错误没有发生,网站继续工作。

5 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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:Sry,我看到符号是ISS服务器......哼,也许可以在ISS的error_log中查看有关错误的更多信息(我不知道在哪里)

答案 2 :(得分:1)

我经历过这个。您的error_log可能对文件来说太大了。例如,当您的error_log达到16mb时,服务器将抛出错误500.您可以删除您的error_log并尝试它是否仍然会抛出该错误。您可能也想检查error_logs权限和所有权。

答案 3 :(得分:1)

您希望避免error_log函数引发500内部服务器错误!

好吧,如果可能是这种情况,您是否尝试使用“@”将您的调用前置于error_log。这可能会抑制错误。请尝试还原! :)

答案 4 :(得分:0)

您可以尝试使用error_log()在备用路径中编写应用程序日志:

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

或者您可以配置php以登录到Windows事件日志(在您的php.ini中):

error_log = syslog