zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    算法第三章上机实践报告
    算法第3章作业
    算法第二章上机实验报告
    对二分法的理解和关于结对编程的看法
    轮播图终极版
    C语言II博客作业04
    C语言II博客作业03
    C语言II博客作业02
    C语言II博客作业01
    作业01
  • 原文地址:https://www.cnblogs.com/zemliu/p/2482747.html
Copyright © 2011-2022 走看看