Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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 同步文件访问_Php - Fatal编程技术网

Php 同步文件访问

Php 同步文件访问,php,Php,使用: 如果两个用户试图同时打开同一个文件,会发生什么情况?是的,您可以同时打开两个文件,除非您锁定文件[flock]。然而,聚集文件的最佳时间是在您写入文件时,或者如果您选择在任何一点只允许一个用户查看文件。重要的是: 当他们写作时会发生什么 如果(a)读,(b)读然后(b)写然后(a)写会发生什么?(a)的写入是否无效,因为它的计算不再从最新状态派生 经典示例是许多文本中使用的示例 任何类型的共享可写状态都需要某种形式的并发访问控制,如a,但存在大量的潜在问题,如、饥饿和上的变化 然而,许多

使用:


如果两个用户试图同时打开同一个文件,会发生什么情况?

是的,您可以同时打开两个文件,除非您锁定文件[flock]。然而,聚集文件的最佳时间是在您写入文件时,或者如果您选择在任何一点只允许一个用户查看文件。

重要的是:

  • 当他们写作时会发生什么
  • 如果(a)读,(b)读然后(b)写然后(a)写会发生什么?(a)的写入是否无效,因为它的计算不再从最新状态派生
  • 经典示例是许多文本中使用的示例

    任何类型的共享可写状态都需要某种形式的并发访问控制,如a,但存在大量的潜在问题,如、饥饿和上的变化

    然而,许多操作系统允许某种描述,这意味着另一个进程等待释放锁。请参见

    您还可以使用“签出、更改、提交/合并”方法

    根据您的原因,您可能需要考虑一个数据库,例如,或将提供“强”>“更快”、“更健壮”、“<强”>共享重读或无缓存的状态的方式。


    分享国家的众多问题、陷阱和方式是巨大的。为维基百科的使用道歉。

    经常发生。但是,问题的答案取决于双方对打开的文件的具体操作。可能的行动/解决方案将完全取决于此要求

    小规模文件操作非常快,几乎不可能同时进行两次写入。无论如何,您可以使用
    flock
    锁定文件:

    fopen
    fwrite
    fclose
    
    注意
    fclose
    会自动解锁文件,但我发现这样做会使代码更易于使用,可以将这些东西放入其中。

    使用
    文件附加
    锁定
    标志。


    任何这些标志都会锁定文件进行写入。

    我不确定确切答案。但是,是的,有人尝试过这个。这也取决于操作系统。这几乎就是MySQL 3.x在web开发早期如此流行的全部原因。如果解释器锁定了文件,但在解锁之前,服务器死亡,因此无法解锁会怎么样?:)@noname-是的。锁定系统通常需要仲裁、达成共识并处理这些事情。
    $fp = fopen('file.log', 'a+');
    flock($fp, LOCK_EX);
    fwrite($fp, 'my data');
    flock($fp, LOCK_UN);
    fclose($fp);