运行时重命名PHP文件 - 是可能的锁定


php file renaming while running - is a lock possible?

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

是的,请参阅羊群功能的手动输入

手册中的示例:

<?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 脚本修改/读取。