我有这段代码
<?php
if (!file_exists($folderAddress . $_GET['name'] . '.json')) {
//create file
$myJson = fopen($folder.$_GET['name']. ".json", "w");
//get a context of a url
$ch = curl_init($myUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$text = '';
if( ($text = curl_exec($ch) ) === false)
{
die('fail');
}
// Close handle
curl_close($ch);
//copy to json file
$result = fwrite($myJson, $text);
fclose($myJson);
$t = time();
//add update date to db
if (!mysqli_query($con, "INSERT INTO test (name )
VALUES ('$_GET['name]', '$t')")
) {
echo $text;
mysqli_close($con);
die('');
}
//show the json file
echo $text;
}
?>
如果用户同时请求此文件或延迟时间小于500毫秒,并且所有人都认为该文件不存在,则会出现此问题。那么如何防止用户在第一次写文件时写文件呢?
答案 0 :(得分:5)
在写入文件时使用独占锁定,因此其他进程在初始化过程完成之前不会发生干扰。您也不需要fopen
/ fwrite
。
使用cURL获取您的数据并使用以下代码段:
file_put_contents($filename, $contents, LOCK_EX);