PHP不断将文本附加到文件foo.log
,模式为"a"
。我想在python中读取foo.log
的内容并截断已读取的行,同时避免python和PHP之间的并发访问问题。
This answer表示os.rename
在大多数平台上都是原子的。因此,通过简单地将foo.log
重命名为bar.log
然后将bar.log
读入python来实现我的目标是否安全?或者我是否需要实现更复杂的解决方案,例如共享锁文件?
答案 0 :(得分:1)
如果你fopen
,可能不会。我用于日志的是
file_put_contents( $filename, $data, FILE_APPEND|LOCK_EX);
这样你就没有一个开放的资源句柄,并且如果在写入时不存在,它将创建一个文件。
我用fwrite
尝试了一次,大约有15个不同的进程都记录了东西,最后有一半NUL
垃圾文件。所以我开始使用它。
http://php.net/manual/en/function.file-put-contents.php
FILE_USE_INCLUDE_PATH 在include目录中搜索文件名。有关更多信息,请参阅include_path。
FILE_APPEND 如果文件文件名已存在,请将数据附加到文件中,而不是覆盖它。
LOCK_EX 在继续写入的同时获取文件的独占锁定。换句话说,在fopen()调用和fwrite()调用之间发生flock()调用。这与使用模式" x"的fopen()调用不同。