PHP和并发文件访问

Luk*_*uke 11 php concurrency file

我正在用PHP构建一个小型Web应用程序,它将一些信息存储在纯文本文件中.但是,此文本文件由我的应用程序的所有用户在某个给定时间点使用/修改,并且可能同时使用.

所以问题是.确保只有一个用户可以在任何给定时间点对文件进行更改的最佳方法是什么?

小智 22

你应该锁定文件

    $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);
Run Code Online (Sandbox Code Playgroud)

看看http://www.php.net/flock


Kyl*_*nin 11

我的建议是使用SQLite.它快速,轻量级,存储在文件中,并具有防止并发修改的机制.除非您正在处理预先存在的文件格式,否则SQLite就是您的选择.