网上查找了下相关的资料,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来确定进程是否结束:
- foreach ($generateFiles as $generateNumber => $generateMsg) {
- $generateNumberArr[
$
generateNumber] = popen("php /var/www/html/DNSnew/include/generateZonfConf.php " . $generateMsg . " " . $serial . " " . $forderDir, 'r');
- }
- foreach (
$
generateNumberArr as $generateNumberArr_k =>$generateNumberArr_v) {
- while (
!
feof($generateNumberArr_v)) {
- $buffer
= fgets($generateNumberArr_v, 4096);
- if (
strstr($buffer, 'ff0000')) {
- $forderDir =
false;
- }
- usleep(
100000);
- }
- pclose(
$
generateNumberArr_v);
- }
上述方法很好的解决了我需要处理的问题
备注:对于php的外围参数是不可以传数组的