【问题标题】:How to copy a file and truncate original without dataloss using php如何使用php复制文件并截断​​原始文件而不会丢失数据
【发布时间】:2012-08-15 20:03:45
【问题描述】:

我有一个生成日志文件的 php 脚本。 另一方面,我有另一个脚本应该每小时运行一次来​​处理日志文件。

在我的第二个脚本中,我想复制并截断正在写入的日志文件,而不会丢失任何数据。

在一个有限的测试中,我一直在使用重命名来创建副本,我得到了预期的结果

但我担心这种方法的正确性。

这样做安全吗?

【问题讨论】:

    标签: php logging cron


    【解决方案1】:

    您正在做的事情称为“日志轮换”,是的,通过重命名日志文件来做到这一点是安全的。

    • 在 Linux 中,您可以在另一个应用程序写入文件时重命名文件,并且该应用程序将继续写入重命名的文件。详情请见this SO answer

    • 在 Windows 中,如果打开文件的应用程序在调用 CreateFile 时设置了 FILE_SHARE_DELETE 标志,则只能重命名打开的文件。如果设置了该标志,它的工作方式与在 Linux 上的工作方式相同(应用程序继续写入重命名的文件)。如果未设置,任何重命名文件的尝试都将失败。

    您可能还对logrotate 命令感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-07
      相关资源
      最近更新 更多