在php中编辑常见的临时文件以防止冲突

FFMG

我想要一个不时更新的临时文件。我当时想做的是:

<!-- language: lang-php -->
// get the contents
$s = file_get_contents( ... );

// does it need updating?
if( needs_update() )
{
    $s = 'some new content';
    file_put_contents( ... );
}

我可以看到发生的问题是,无论哪种情况导致“ needs_update()”返回true,都可能导致多个进程(几乎)同时更新同一文件。

在理想情况下,我将只有一个进程来更新文件,并阻止所有其他进程读取文件,直到完成为止。

因此,一旦“ needs_update()”返回true,我就会阻止其他进程读取文件。

<!-- language: lang-php -->
// wait here if anybody is busy writing to the file.
wait_if_another_process_is_busy_with_the_file();

// get the contents
$s = file_get_contents( ... );

// does it need updating?
if( needs_update() )
{
    // prevent read/write access to the file for a moment
    prevent_read_write_to_file_and_wait();

    // rebuild the new content
    $s = 'some new content';
    file_put_contents( ... );
}

这样,只有一个进程可能会更新文件,并且文件都将获取最新值。

关于如何预防此类冲突有什么建议吗?

谢谢

FFMG

乌卡曼

您正在寻找羊群功能。只要每个访问该文件的人都可以使用flock。来自php手册的示例:

$fp = fopen("/tmp/lock.txt", "r+");

if (flock($fp, LOCK_EX)) {  // acquire an exclusive lock
    ftruncate($fp, 0);      // truncate file
    fwrite($fp, "Write something here\n");
    fflush($fp);            // flush output before releasing the lock
    flock($fp, LOCK_UN);    // release the lock
} else {
    echo "Couldn't get the lock!";
}

fclose($fp);

手册:http//php.net/manual/zh/function.flock.php

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在php中创建临时文件名

来自分类Dev

在PHP中存储临时文件的名称和路径

来自分类Dev

在PostgreSQL中删除临时文件

来自分类Dev

如何防止spyder在我保存的文件的同一目录中创建临时文件

来自分类Dev

如何防止WinRar删除临时文件?

来自分类Dev

ruby临时目录中的临时文件

来自分类Dev

临时文件问题

来自分类Dev

Firefox临时文件

来自分类Dev

临时文件BASH

来自分类Dev

读写临时文件

来自分类Dev

如何将文件内容复制到PHP中的临时文件中?

来自分类Dev

PHP上传文件成功,但临时文件丢失

来自分类Dev

什么是清除php中存储的临时文件的正确方法?

来自分类Dev

PHP-无法读取上传的临时文件

来自分类Dev

确定模板中临时文件的大小

来自分类Dev

在堆栈机中处理临时文件

来自分类Dev

在PyCharm中打开新的临时文件?

来自分类Dev

snakemake在配置中声明临时文件

来自分类Dev

Chrome中的临时文件存储在哪里?

来自分类Dev

在sh脚本中找不到临时文件

来自分类Dev

如何在卷中查找大/临时文件

来自分类Dev

在Roku中读取和写入临时文件

来自分类Dev

临时文件未放置在子目录中

来自分类Dev

在测试中从哪里创建临时文件

来自分类Dev

如果临时文件存在于Ubuntu OS中,如何清除(删除)临时文件?

来自分类Dev

使用资源处理临时文件

来自分类Dev

如何停止创建临时文件

来自分类Dev

无法读取python临时文件

来自分类Dev

Rails重命名临时文件