3

我将需要php在运行时对文件进行更改。
这是一个配置文件,在紧急情况下需要更改其设置之一。
我的问题是是否有可能lock在写入之前对文件进行处理,以便尝试访问该文件的其他会话将推迟到文件被重写,而不是使会话崩溃说找不到文件?

4

1 回答 1

3

是的,请看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);

?>

显然有一些警告,例如,如果您使用的是过时的文件系统 (FAT)flock()将始终返回 false。如果您将 PHP 用作 ISAPI 扩展,则flock不会锁定文件,以免被并行线程中运行的其他 PHP 脚本修改/读取。

于 2012-05-07T19:13:25.157 回答