php并发处理


   最近某个项目用php生成文件,但是由于文件量太大,单个进程生成需要很长的时间,所以想并发进行处理。
   网上查找了下相关的资料,php本身是没有多线程的概念的,那就只能用多进程了,再找资料却是有多进程的处理方式。
   首先想到的是pcntl_fork(手册介绍: http://php.net/manual/en/function.pcntl-fork.php)起进程起来并发处理,然后底层做了测试,效果也还不错,但是当通过apache调用的时候却无法运行。然后看到了pcntl_fork手册有下面一句:
It is not possible to use the function 'pcntl_fork' when PHP is used as Apache module. You can only use pcntl_fork in CGI mode or from command-line.
Using this function will result in: 'Fatal error: Call to undefined function: pcntl_fork()'
 所以只能想其它方法进行处理了。
   后来查看到可以用popen开进程来处理,然后用feof来确定进程是否结束:
  
  1. foreach ($generateFiles as $generateNumber => $generateMsg) {
  2.          $generateNumberArr[$generateNumber] = popen("php /var/www/html/DNSnew/include/generateZonfConf.php " . $generateMsg . " " . $serial . " " . $forderDir, 'r');    
  3.      }

  4.      foreach ($generateNumberArr as $generateNumberArr_k =>$generateNumberArr_v) {
  5.          while (! feof($generateNumberArr_v)) {
  6.              $buffer = fgets($generateNumberArr_v, 4096);
  7.             if (strstr($buffer, 'ff0000')) {
  8.                 $forderDir = false;
  9.             }
  10.              usleep(100000);
  11.          }
  12.          pclose($generateNumberArr_v);
  13.      }
上述方法很好的解决了我需要处理的问题
备注:对于php的外围参数是不可以传数组的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值