Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在来自不同PHP线程的同一文件上运行file_put_contents()是否存在风险?_Php - Fatal编程技术网

在来自不同PHP线程的同一文件上运行file_put_contents()是否存在风险?

在来自不同PHP线程的同一文件上运行file_put_contents()是否存在风险?,php,Php,我知道用PHP将数据附加到文件中非常容易。我想尝试使用PHP“”从不同的PHP线程将内容()放入同一个日志文件中。在来自不同PHP线程的同一文件上运行file_put_contents()是否存在风险,或者如果文件被锁定或被其他线程访问,这些线程是否会愉快地阻止该文件 编辑:发现建议,但风险问题似乎没有得到充分解决。这些是“原子”写操作吗?如手册页上所述(您提供了链接!): 使用LOCK\u EX标志防止重复写入简单回答,是。冲突可能发生 使用类似于file\u put\u contents($

我知道用PHP将数据附加到文件中非常容易。我想尝试使用PHP“”从不同的PHP线程将内容()放入同一个日志文件中。在来自不同PHP线程的同一文件上运行file_put_contents()是否存在风险,或者如果文件被锁定或被其他线程访问,这些线程是否会愉快地阻止该文件


编辑:发现建议,但风险问题似乎没有得到充分解决。这些是“原子”写操作吗?

如手册页上所述(您提供了链接!):


使用
LOCK\u EX
标志防止重复写入

简单回答,是。冲突可能发生

使用类似于
file\u put\u contents($location、$data、file\u APPEND | LOCK\u EX)的内容


当您希望多个实例写入同一个文件时,您应该获得一个独占锁,以便在当前进程完成写入其数据之前,其他进程无法写入该文件--很明显,使用
LOCK_EX
标志时,没有人会干预您的写作。但他们付出了什么代价?如果你最关心的一个问题是这项工作的成功,而不是其他人呢?假设另一个线程将等待锁被移除并成功写入,这样安全吗?用于锁定。默认情况下,该函数将一直阻止,直到获得锁为止,并且由于
文件\u put\u内容
无法指定任何其他内容,因此我假设它也将在此处阻止。为了澄清问题,它是一个建议锁。只有当另一个线程使用相同类型的锁定时,此功能才会工作,因此调用此函数(或基于相同锁定系统的其他函数)的人将阻塞(此调用)是有效的。任何其他不遵守这把锁的人都可以完全忽略它,而不必神奇地等待或诸如此类的事情。
// 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);