PHP实现多线程读写文件

 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>
原文地址:https://www.cnblogs.com/zemliu/p/2482747.html