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>
  • 相关阅读:
    JAVA调用WCF
    写代码之前要做什么?
    漫谈界面和数据
    UIButton 简易的UI
    数据结构利器之私房STL(中)
    有趣的位运算
    基于TCP的C/S初级网络编程1
    数据结构利器之私房STL(上)
    Unix/Linux 那些系统启动后的进程
    【字符串匹配】KMP算法之道
  • 原文地址:https://www.cnblogs.com/zemliu/p/2482747.html
Copyright © 2011-2022 走看看