Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.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 使用flock和move进行高效文件更新_Php_Concurrency_Rename_Flock - Fatal编程技术网

Php 使用flock和move进行高效文件更新

Php 使用flock和move进行高效文件更新,php,concurrency,rename,flock,Php,Concurrency,Rename,Flock,我想在其他进程正在读取文件时更新文件。PHPflock()函数正好允许这样做 然而,在我看来,羊群只接受一个文件句柄。。这通常来自fopen。如果我想有效地执行此操作,我不想保持文件打开并写入,因为文件通过网络传输,写入操作可能会持续几秒钟(比如2-3秒) 所以我希望能将数据写入临时文件,然后移动它。在这种情况下,只有在我重命名文件时,文件的读卡器才会受到干扰 现在,将数据写入temp将不需要我使用flock。但是,如何使用锁定将tempfile正确移动到实际文件 我还想知道我是否真的需要首先锁

我想在其他进程正在读取文件时更新文件。PHP
flock()
函数正好允许这样做

然而,在我看来,羊群只接受一个文件句柄。。这通常来自fopen。如果我想有效地执行此操作,我不想保持文件打开并写入,因为文件通过网络传输,写入操作可能会持续几秒钟(比如2-3秒)

所以我希望能将数据写入临时文件,然后移动它。在这种情况下,只有在我重命名文件时,文件的读卡器才会受到干扰

现在,将数据写入temp将不需要我使用flock。但是,如何使用锁定将tempfile正确移动到实际文件


我还想知道我是否真的需要首先锁定。。搬家不是很快吗?这会不会影响同步文件读取。我预计将有100次读取,但只有一次更新,而且更新将每小时发生一次

重命名在POSIX系统中是原子的,所以您不需要flock。已打开文件的读卡器将不受干扰。(对正:打开的文件句柄指向inode,而不是目录项。重命名仅更改目录项。)

但是,读取器必须关闭并重新打开文件才能获取新内容。如果读者保持文件打开,他们将能够重新阅读旧内容