Php 如何知道文件是否仍处于打开状态以供写入

Php 如何知道文件是否仍处于打开状态以供写入,php,Php,我有一个向文件写入的函数,如何使用另一个脚本检查文件是否用于写入或已关闭 编辑:其他脚本/应用程序/系统可能会打开此文件进行写入 谢谢。我建议只使用文件打开功能,如果返回false,那么文件显然仍然打开。您应该在两个脚本中都使用。这会在文件上放置一个标志,以便通知其他脚本该文件正在使用中。通过使用fclose或在脚本末尾隐式关闭该标志。如果您在Unix上,您的系统可能已安装(“列出打开的文件”)命令。 输出中的“FD”列指示文件是否已打开进行读取, 写作,或两者兼而有之 我想指出的是,任何形式的


我有一个向文件写入的函数,如何使用另一个脚本检查文件是否用于写入或已关闭

编辑:其他脚本/应用程序/系统可能会打开此文件进行写入


谢谢。

我建议只使用文件打开功能,如果返回false,那么文件显然仍然打开。

您应该在两个脚本中都使用。这会在文件上放置一个标志,以便通知其他脚本该文件正在使用中。通过使用
fclose
或在脚本末尾隐式关闭该标志。

如果您在Unix上,您的系统可能已安装(“列出打开的文件”)命令。 输出中的“FD”列指示文件是否已打开进行读取, 写作,或两者兼而有之

我想指出的是,任何形式的“检查文件X是否已打开以供写入,如果已打开,请执行某些操作…”的过程都会受到竞争条件的限制。其他一些过程
检查后,但在操作开始之前,可以打开文件。

查看flock示例:虽然flock是答案(或
dio\u fcntl
),但flock只提供一个建议锁。你必须在任何地方与flock协调。任何其他不使用flock的脚本都可以随时操作该文件。@jasonbar因此使用“在两个脚本中”。在你第一次发表评论后,我更新了我的答案,以反映你的精彩观点。是的,我想你知道发生了什么,只是措辞有点模棱两可+1任何其他解决方案,此文件可能会被其他脚本/应用程序/系统打开以供写入…@Rohan,这包括跨脚本/应用程序的情况。你说的“系统”是什么意思?另一台物理(或虚拟)计算机?您可以在同一个文件上调用fopen(),调用次数不限,调用脚本的次数不限。@Ronan:在Windows中,这更简单——LockFile函数允许以独占方式访问文件(甚至部分文件)。大多数Unix文件系统只提供建议锁,而您无法控制的其他进程不一定会遵守这些建议锁,因此对于该环境来说,文件锁不是一个好的设计选择。lsof或
flock()
可能会让你部分到达那里。