海运的博客

PHP多进程同时写文件

发布时间:December 1, 2013 // 分类:PHP // No Comments

使用系统提供的flock函数:

<?php
   function ffwrite($filename,$content) {
      $file = fopen("$filename","a");
      while(1) {
         if (flock($file,LOCK_EX))
         {
            fwrite($file,$content);
            flock($file,LOCK_UN);
            fclose($file);
            break;
            } else {
            usleep(1000);
         }
      }
   }
?>

或根据创建文件判断其它进程是否在写操作,性能略差,测试1000次20进程写操作慢3%。

<?php
 function _fwrite($filename, $content) {
     $filename_lock = $filename . '.lock';
     while(1)
     {
         if(file_exists($filename_lock))
            {
             usleep(1000);
             } else {
             touch($filename_lock); 
             $f = fopen($filename, 'a');
             fwrite($f, "$content");
             fclose($f);
             unlink($filename_lock);
             break;
             }       
         }
     if(file_exists($filename_lock))
        {
         unlink($filename_lock);
         }
     }
 ?>

标签:php

评论已关闭

分类
最新文章
最近回复
  • 海运: 正常情况下编译整个内核执行make menuconfig后就不会出现此提示,当单独编译单个模块...
  • oijq: 就是用的armbian的配置文件哈,按你的教程做的,在执行make LOCALVERSION=...
  • 海运: 使用armbian的配置文件,其它添加或修改自己懂的部分,不懂的就不要碰了。
  • oijq: 编译时这些选项全部选Y吗?Actions Semi Platforms (ARCH_ACTIO...
  • 海运: n1编译bbr内核模块参考这个:https://www.haiyun.me/archives/...
  • jiqz: make M=net/ipv4/ CONFIG_TCP_CONG_BBR=m modules编...
  • ruralhunter: 哦,文档里应该是对的,是.config
  • ruralhunter: cp /mnt/boot/config-4.18.7-aml-s9xxx .config这里应...
  • 海运: 你是编译不成功呢?还是编译后不能运行呢?还是运行后不能访问web界面呢?
  • 白墨: 可能不清楚就是编译安装后启动后访问不了web界面