PHP 代碼 ,確保多個進程同時寫入同一個文件成功


 
         

fopen :打開文件或者URL

 
         
參數1:文件地址或者URL
參數2:mode 參數指定了所要求到該流的訪問類型
    'r'	只讀方式打開,將文件指針指向文件頭。
    'r+'	讀寫方式打開,將文件指針指向文件頭。
    'w'	寫入方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。
    'w+'	讀寫方式打開,將文件指針指向文件頭並將文件大小截為零。如果文件不存在則嘗試創建之。
    'a'	寫入方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
    'a+'	讀寫方式打開,將文件指針指向文件末尾。如果文件不存在則嘗試創建之。
 
         

? ?fwrite : 寫入文件

 
         
參數1:文件名文件系統指針
參數2: 要寫入的內容 string類型
返回值: 寫入成功返回寫入的字符數,失敗返回false
 
         

? ?flock: 輕便的咨詢文件鎖定

 
         
參數1:文件系統指針,是典型地由 fopen() 創建的 resource(資源)。
參數2:模式
    LOCK_SH取得共享鎖定(讀取的程序)。
    LOCK_EX 取得獨占鎖定(寫入的程序。
    LOCK_UN 釋放鎖定(無論共享或獨占)。
    如果不希望 flock() 在鎖定時堵塞,則是 LOCK_NB(Windows 上還不支持)。

返回值:成功時返回 TRUE, 或者在失敗時返回 FALSE。
 
         

? ?fclose : 關閉一個打開的文件指針



方案一
function writeData($filepath, $data) { $fp = fopen($filepath,'a'); do{ usleep(100); }while (!flock($fp, LOCK_EX)); //LOCK_EX 取得獨占鎖定(寫入的程序)進行排它型鎖定 獲取鎖 有鎖就寫入,沒鎖就得 $res = fwrite($fp, $data."\n"); flock($fp, LOCK_UN); //LOCK_UN 釋放鎖定(無論共享或獨占)。 fclose($fp); return $res; } 方案二(自己做標記的方法) function write_file($filename, $content) { $lock = $filename . '.lck'; $write_length = 0; while(true) { if( file_exists($lock) ) { usleep(100); } else { touch($lock); $write_length = file_put_contents($filename, $content, FILE_APPEND); break; } } if( file_exists($lock) ) { unlink($lock); } return $write_length; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM