【问题标题】:Synchronize file_get_contents and file_put_contents functions using PHP使用 PHP 同步 file_get_contents 和 file_put_contents 函数
【发布时间】:2014-09-11 21:41:34
【问题描述】:

我有一个 json 文件。我正在使用 file_get_contents 获取所有内容,并将内容放入一个名为 $js 的变量中。然后我将添加新数据,或者从 $js 变量中删除一些数据。然后我使用 file_put_contents 将数据覆盖到 json 文件中。但是很多用户会使用它。

有什么办法可以同步。就像一个用户使用了 file_get_contents 一样,在他覆盖它之前,其他用户将不得不等待。我在想信号量之类的东西。据我了解,flock 不起作用,因为我没有打开 json 文件进行读写。

【问题讨论】:

    标签: php json semaphore synchronize flock


    【解决方案1】:

    是的,信号量应该可以解决问题。虽然这需要额外的机制来对传入的查询(对您的 json 文件的修改)进行排队,这听起来可能与无状态编程有关。

    您可以尝试一次又一次地发送请求,直到您成功修改文件,但这很糟糕。在我看来,您可以使用多线程 (http://php.net/manual/en/intro.pthreads.php)。管理查询的一个线程:

    1. 您可以使用数据库来插入传入的查询(使用在 INSERT/DELETE 上快速的引擎)
    2. 或者您可以创建一个带有查询保存的文件(应该足够快)

    第二个线程可用于读取数据库或文件(取决于实现)并修改您的 json 文件。

    【讨论】:

    • 我真的很抱歉,但整个事情都超出了我的想象。你能进一步解释一下吗?
    • 这个想法很简单。尝试实现一个信号量:php.net/manual/en/book.sem.php。但是,您还需要考虑当用户无法访问文件时会发生什么情况。你向他们发送错误吗?不断刷新页面以获得访问权限?如果有人获得了访问权限,然后再也没有归还,会发生什么?这是您系统中的一个大瓶颈。如果用户必须拥有要编辑的文件的最新版本,那么线程是无用的。但是,如果您可以提取所需的更改,那么它们可能会有所帮助。
    猜你喜欢
    • 2019-06-22
    • 1970-01-01
    • 2013-03-25
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    相关资源
    最近更新 更多