首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP函数error_log()安全吗?

使用PHP函数error_log()安全吗?
EN

Stack Overflow用户
提问于 2011-06-17 01:06:06
回答 1查看 4.3K关注 0票数 17

我想确保没有通过使用a custom PHP error handler引入的竞争条件。为此,我想知道是否可以依赖error_log(),或者是否需要使用其他文件锁定方法来确保正确记录错误。

默认的PHP错误处理程序是如何工作的?它在竞争条件下是安全的吗?

例如,我是否必须锁定文件(这可能会导致这个简单版本中的错误丢失)

代码语言:javascript
复制
function log_error($message)
{
    if(! $fp = @fopen('/path/to/error.log', 'a'))
    {
        return FALSE;
    }

    flock($fp, LOCK_EX);
    fwrite($fp, $message);
    flock($fp, LOCK_UN);
    fclose($fp);

    return TRUE;
}

或者我可以直接打电话给error_log?

代码语言:javascript
复制
error_log($message, 0);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-06-17 01:19:41

您可以在ext/standard/basic_functions.c中找到error_log实现的源代码。您将看到,它几乎只是调用任何已定义的记录器。如果您担心由于多个并发调用而导致的error_log本身的某种数据传输,则不必担心。或者至少,并不比大多数其他PHP代码更关注。如果您的自定义记录器正在写入文件,您将需要自己实现文件锁定。对error_log的并发调用(跨进程)是一种非常常见的场景。

编辑

几乎可以肯定,使用error_log提供的内置日志记录会更好。

PHP flock实现使用建议锁定,这使得其他进程可以简单地忽略锁并写入。此外,在您自己的进程中,当进程等待获取锁时,您最终将被绑定到IO。通过使用error_log,您可以配置系统日志记录。Syslog是异步的,因此您可以避免获取锁,而且它(通常)还由一个内核缓冲区支持,该缓冲区将允许任何syslog守护进程写入连续的记录而不会出现问题。

在许多公司实现了高吞吐量日志记录后,我强烈建议您配置syslog或使用诸如scribe之类的工具。我的2c.

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6375809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档