问题描述
|
如果两个人在彼此之间大约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;
}