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; }