gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:12:41 24 4
gpt4 key购买 nike

我想确保使用 a custom PHP error handler 不会引入竞争条件.为此,我想知道我是否可以依靠 error_log()或者如果我需要使用其他一些文件锁定方法来确保正确记录错误。

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

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

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 吗?

error_log($message, 0);

最佳答案

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

编辑

您几乎可以肯定地使用通过 error_log 提供的内置日志记录会更好.

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

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

关于php - PHP 函数 error_log() 使用安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6375809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com