【问题标题】:php: exclusive lock on file never obtainedphp:从未获得文件的排他锁
【发布时间】:2014-05-28 05:38:51
【问题描述】:

在我的 php 脚本中,解析字符串后,我需要将一些数据写入文件(如果不存在则创建后)。在写入文件之前,我需要排他锁以避免出现问题。 这是我的代码:

foreach ($elements[0] as $current) {
    $file_handler = fopen($my_folder . "/" . $current . ".txt", "a");
    $locked = flock($file_handler, "LOCK_EX");
    while (!$locked) {
        usleep(500000);
        $locked = flock($file_handler, "LOCK_EX");
    }
    //got lock
    fwrite($file_handler, $mystring . "\n");
    //release lock
    flock($file_handler, LOCK_UN);
    fclose($file_handler);
}
return;

现在,有些东西似乎不起作用。 fopen 创建文件,但我的代码似乎在 while 内部循环(文件已创建,但内部没有写入任何内容)。怎么了?

【问题讨论】:

  • 我建议使用数据库来避免这个问题。
  • 我无法使用 db,因为我需要存储 db 无法存储的大量数据(在我的情况下,对于少量数据,db 可能没问题)编辑:当我调用该脚本时,我是唯一一个要求锁定文件的人

标签: php file flock filelock


【解决方案1】:

您将锁定参数作为字符串而不是常量传递。

试试:

$locked = flock($file_handler, LOCK_EX);

注意 LOCK_EX

周围缺少双引号

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    • 2011-06-10
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 2015-06-02
    相关资源
    最近更新 更多