file_put_contents擦除文件

问题描述

| 如果两个人在彼此之间大约5毫秒之内加载同一页,则两个同时的“ 0”调用似乎将文件清除为空白,从而丢失了所有数据。 如何安全地写入文件,以确保无论多少人在同一时间加载页面文件都不会被擦除为空白? 我不能为此使用MysqL数据库,那将是非常多余的。     

解决方法

file_put_contents具有第三个参数。在那写
LOCK_EX
。     ,在您的php中使用while循环并检查文件锁定。 这是一些阅读 http://php.net/manual/zh/function.flock.php 编辑
$fp = fopen(\"/tmp/lock.txt\",\"r+\");
while(!flock($fp,LOCK_EX))
      {
      usleep(10);
      }
//do stuff
flock($fp,LOCK_UN);
fclose($fp);
    ,
/**
 * Writes a file without the worry on simultaneous file writings.
 *
 * @param mixed $data - Data to put into the file.
 * @param string $filePath - Path to the file to put data into.
 * @param number $timeOut - The maximum time (milliseconds) until method attempts to write file (defaults to 1000).
 * @return bool - Returns true if data has been written.
 */
function writeDataToFileSafely($data,$filePath,$timeOut = 1000)
{
    $interval = 10; // milliseconds
    $elapsed = 0;
    $success = false;

    while($success === false && $elapsed < $timeout)
    {
        $success = file_put_contents($filePath,$data,LOCK_EX);
        usleep(interval * 1000); // to microseconds
        $elapsed += $interval;
    }

    return $success;
}