添加php拓展(以phppcntl及phpredis及phppcntl为例)

  我们都知道php是单进程的,虽然swoole支持多进程,但我没接触过(这个以后肯定要学习)。但是php添加一个php-pcntl拓展也可以实现多进程处理一个事务。

  下面是一个简单的例子:

 1         $pids = array();
 2         foreach ($result as $k => $v) {
 3             $pids[$k] = pcntl_fork(); //起一个子进程
 4             switch ($pids[$k]) {
 5                 case -1:
 6                     echo "fork error : \r\n";//进程创建失败
 7                     exit;
 8                 case 0:
 9                     match($city, $table_name, $v);//进程创建成功 进行逻辑处理
10                     exit;
11                 default:
12                     break;
13             }
14         }
15         foreach ($pids as $i => $pid) {
16             if ($pid) {
17                 pcntl_waitpid($pid, $status);//监督子进程状态,并回收僵尸进程
18             }
19         }    

  附:

  php-pcntl文档地址:http://php.net/manual/zh/book.pcntl.php

  当然本文的重点是编译安装拓展

  一、安装php-pcntl拓展

  我装的是php7,恰好我的php源码ext子目录下有pcntl 所以省去了下载的一步(如果没有请百度下载);

  第一步,切到pcntl目录下

  

1 cd /home/***/php-7.2.3/ext/pcntl

  第二步,调用phpize命令生成./configure 文件

1 find / -name phpize
//查看phpize的位置
1 /usr/local/php/bin/phpize  //调用生成 ./configure 

  第三步, 调用./configure

1  find / -name php-config //查找php-config
1 ./configure --with-php-config=/usr/local/php/bin/php-config //取决于你安装php之后php-config文件的位置

  第四步,make && make install编译安装(注:一定要分开操作,make的时候有时会提示些错误)

  第五步,php.ini添加 pcntl.so

1  echo "extension=pcntl.so" >> /etc/php.ini //注意自己的php.ini的位置

  第六步,重启php-fpm

1 systemctl restart php-fpm.service

也可以用 

1 systemctl reload php-fpm.service

  我的reload不知道怎么回事不能用了,所以用了restart。这样pcntl拓展就安装完成了

1  php -m |grep pcntl //查看拓展安装

  

  二、安装php-redis拓展

  php-redis的拓展安装与上面的步骤一样,写在博客里主要是因为当时php源码里没有redis的包,自己在网上找的,付一下地址:http://pecl.php.net/package/redis

  步骤简单写一下:

  1、下载拓展包,解压并切换到解压完的目录下

  2、phpize生成./configure文件

  3、./configure --with-php-config=/usr/local/php/bin/php-config

  4、make && make install

  5、php.ini添加 extension=redis.so

  6、重启php-fpm

  7、php-m检查拓展安装情况

  

原文地址:https://www.cnblogs.com/jwcrxs/p/8745998.html