如何处理在php中写入文件的多个请求?

时间:2014-08-05 07:39:45

标签: php

我有这段代码

<?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毫秒,并且所有人都认为该文件不存在,则会出现此问题。那么如何防止用户在第一次写文件时写文件呢?

1 个答案:

答案 0 :(得分:5)

在写入文件时使用独占锁定,因此其他进程在初始化过程完成之前不会发生干扰。您也不需要fopen / fwrite。 使用cURL获取您的数据并使用以下代码段:

file_put_contents($filename, $contents, LOCK_EX);