我知道file_put_contents()可以很容易地将数据附加到PHP中的文件中。我想尝试将PHP“threads”用于file_put_contents()
到来自不同PHP线程的相同日志文件。在不同PHP线程的同一文件上运行file_put_contents()是否存在风险,或者如果文件被锁定或被另一个线程访问,这些线程是否会高兴地阻塞?
编辑:发现a similar question建议flock(),但风险问题似乎没有完全解决。这些“原子”写操作吗?
答案 0 :(得分:24)
// Write the contents to the file,
// using the FILE_APPEND flag to append the content to the end of the file
// and the LOCK_EX flag to prevent anyone else writing to the file at the same time
file_put_contents($file, $person, FILE_APPEND | LOCK_EX);
使用LOCK_EX
标志来防止双重写入
答案 1 :(得分:4)
简单回答,是的。可能发生冲突
使用类似file_put_contents($location, $data, FILE_APPEND | LOCK_EX);
当您希望多个实例写入同一个文件时,您应该获取一个独占锁,这样在当前文件写完数据之前,其他任何进程都无法写入该文件