1 <html> 2 <body> 3 <?php 4 const MAX_RETRIES = 100; //最大重试数,此处注意,const变量不能写在function内 5 6 /** 7 * @param $file_path 文件路径 8 * @param $file_mode 打开文件模式(eg: r, r+, w, w+, a, a+, x, x+) 9 * @param $lock_mode 加锁模式(eg: LOCK_EX, LOCK_SH, LOCK_UN) 10 * @param $data 需要写入的数据 11 **/ 12 function lock_write($file_path, $file_mode, $lock_mode, $data) { 13 $fp = fopen($file_path, $file_mode); //fopen()打开文件并获得文件流 14 $retries = 1; 15 16 while(!flock($fp, $lock_mode) && $retries < MAX_RETRIES) { //对文件加锁,尝试100次 17 $retries += 1; 18 } 19 if($retries >= 100) { 20 return false; 21 } 22 23 fwrite($fp, $data); //写入数据 24 flock($fp, LOCK_UN); //解锁 25 fclose($fp); //关闭文件流 26 return true; 27 } 28 29 $file_path = '.\\test_write.txt'; 30 $file_mode = 'a+'; //此处使用append+,读写方式打开,文件指针指向文件尾部,文件不存在则创建之 31 $lock_mode = LOCK_EX; //此处使用LOCK_EX,独占锁,用于写入的程序,LOCK_SH为共享锁,用于读取的程序 32 var_dump(lock_write($file_path, $file_mode, $lock_mode, 'good')); 33 ?> 34 </body> 35 </html>