国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

file_put_contents并發(fā)性問題解決方案整理

2024-05-04 21:50:29
字體:
供稿:網(wǎng)友

解決辦法一,file_put_contents 高并發(fā)與獨(dú)占鎖定

發(fā)現(xiàn)高并發(fā)訪問時使用 file_put_contents 寫入文件造成數(shù)據(jù)置空。

查看官方文檔:

int file_put_contents ( string $filename , string $data [, int $flags [, resource $context ]] )

參數(shù):

filename 要被寫入數(shù)據(jù)的文件名。 data 要寫入的數(shù)據(jù)。類型可以是 string,array 或者是 stream 資源(如上面所說的那樣)。 flags flags 可以是 FILE_USE_INCLUDE_PATH,F(xiàn)ILE_APPEND 和/或 LOCK_EX(獲得一個獨(dú)占鎖定),然而使用 FILE_USE_INCLUDE_PATH 時要特別謹(jǐn)慎。 context 一個 context 資源。

直接直至 flags 參數(shù)為 LOCK_EX 即可在高并發(fā)時獲得一個獨(dú)占鎖定。

另外,flock 函數(shù)的也提供了文件鎖定方法:

  1.    
  2. $fp = <a href="/"/tags.php/fopen//"" target="/"_blank/"">fopen</a>("/tmp/lock.txt""w+"); 
  3. if (flock($fp, LOCK_EX)) { // 進(jìn)行排它型鎖定 
  4. fwrite($fp"Write something here//n"); 
  5. flock($fp, LOCK_UN); // 釋放鎖定 
  6. else { 
  7. echo "Couldn't lock the file !"
  8. fclose($fp); 

注意 flock() 需要一個文件指針。

方法二,file_put_contents() 存在高并發(fā)問題,Smarty中處理方式如下。

  1. <?php 
  2.  
  3. define("FILE_PUT_CONTENTS_ATOMIC_TEMP", dirname(__FILE__)."/cache"); 
  4.   
  5. define("FILE_PUT_CONTENTS_ATOMIC_MODE", 0777); 
  6.  
  7. function file_put_contents_atomic($filename$content) { 
  8.   
  9.     $temp = tempnam(FILE_PUT_CONTENTS_ATOMIC_TEMP, 'temp'); 
  10.   
  11.     if (!($f = @fopen($temp'wb'))) { 
  12.   
  13.         $temp = FILE_PUT_CONTENTS_ATOMIC_TEMP . DIRECTORY_SEPARATOR . uniqid('temp'); 
  14.   
  15.         if (!($f = @fopen($temp'wb'))) { 
  16.   
  17.             trigger_error("file_put_contents_atomic() : error writing temporary file '$temp'", E_USER_WARNING); 
  18.   
  19.             return false; 
  20.         } 
  21.     } 
  22.   
  23.     fwrite($f$content); 
  24.   
  25.     fclose($f); 
  26.   
  27.     if ( 
  28. !@rename($temp 
  29. $filename)) { 
  30.   
  31.         @unlink($filename); 
  32.   
  33.         @rename($temp$filename); 
  34.   
  35.     } 
  36.   
  37.     @chmod($filename, FILE_PUT_CONTENTS_ATOMIC_MODE); 
  38.   
  39.     return true; 
  40.   
  41. ?>

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 建昌县| 太谷县| 德保县| 汉沽区| 英德市| 东辽县| 涿鹿县| 余庆县| 弋阳县| 桦甸市| 察哈| 武冈市| 虹口区| 信宜市| 萨迦县| 拉萨市| 石城县| 遂宁市| 耒阳市| 韶关市| 丹巴县| 阿鲁科尔沁旗| 太原市| 岳池县| 图片| 图们市| 加查县| 定兴县| 安图县| 桐乡市| 舞阳县| 即墨市| 韶山市| 绥芬河市| 定南县| 泸定县| 乌拉特前旗| 乌兰浩特市| 板桥市| 沽源县| 宁德市|