【问题标题】:Does PHP offer file concurrency in this scenario?PHP 在这种情况下是否提供文件并发?
【发布时间】:2013-06-12 20:32:07
【问题描述】:

我有一个大约每小时更新一次的缓存文件。文件大小范围从 100KB 到 1MB。更新缓存的方式是使用 file_put_contents() 方法。

服务器写入文件。但是,可以连续访问该文件。用户通过一个脚本访问该文件,该脚本通过 readfile() 执行一次读取以将其回显给用户。

如果缓存脚本正在读取文件,并且服务器运行用户读取脚本,或者相反,会不会有问题?或者这是由 PHP 自动处理的>

【问题讨论】:

  • 是的,会有一些问题。
  • 在不知道如何在服务器 mod cgi 等中调用 php 以及如何设置 php.config 的情况下说是或否是没有意义的...如果一切都已配置,可能没有问题对:D
  • 我应该在 php 配置文件中寻找什么样的东西?另外我想我有 php.ini,还是那个不同的?

标签: php apache unix centos


【解决方案1】:

基本上,您应该在写入或读取时锁定文件。至少,它保证没有问题。这是好的编程方式!示例如下所示。

<?php

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

if (flock($fp, LOCK_EX)) { // do an exclusive lock
    fwrite($fp, "Write something here\n");
    flock($fp, LOCK_UN); // release the lock
} else {
    echo "Couldn't lock the file !";
}

fclose($fp);

?>

More information

【讨论】:

  • 使用 readfile 读取文件但被锁定时会发生什么?或者我应该在尝试阅读之前检查它是否被锁定?在那种情况下,我应该睡一段时间然后再尝试阅读吗?
  • 请注意,在尝试读取文件之前应进行检查。 flock() 函数锁定或释放文件。此函数在成功时返回 TRUE,在失败时返回 FALSE。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
相关资源
最近更新 更多