一环境

centos 7 + lnmp一键安装 (PHP7.2.6)

二问题

为了偷懒使用了lnmp一键安装,后期因为资源数据的快速下载抓取,考虑使用PHP多线程(菜猿上路只懂PHP无奈,虽然知道PHP自身不支持多线程),于是故事开始了…查阅大量百度资源坑啊什么需要重新编译PHP的什么不用重新编译的~more… 最后差点把数据库搞掉~

三思考

要想安装成功pthreads 首要问题就是解决zts问题,(在这里我是用了一键部署的服务的方式,好处很多不多说了,自行体会)这个问题解决就后面就简单了

四方案

(一) 把PHP变成zts模式,由于使用了一键安装的方式,所以事情变得反而简单了…
打开lnmp一键安装官网,传送https://lnmp.org/faq/lnmp1-2-upgrade.html
我们看到这里有各种配置的升级方法,你的嘴角是不是微微翘起了~
没错正如你想~
我们通过阅读得知 通过配置把PHP需要编译的参数:

  修改lnmp.conf配置文件里的 PHP_Modules_Options='--enable-maintainer-zts'

添加到对应位置,启动PHP版本升级,
下面只剩等待了~~~~

更新完成后
使用

[root@localhost ~]# php -v
PHP 7.2.6 (cli) (built: Sep 14 2018 15:36:17) ( ZTS )
Copyright (c) 1997-2018 The PHP 
Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

看到以上就代表成功在即~

(二)pthreads的安装(主角)

[root@localhost ~]# wget https://codeload.github.com/krakjoe/pthreads/zip/master

[root@localhost ~]# unzip master

[root@localhost ~]# cd pthreads-master/

[root@localhost pthreads-master]# phpize 

[root@localhost pthreads-master]#./configure --with-php-config=/usr/local/php/bin/php-config

[root@localhost pthreads-master]# make && make install

[root@localhost pthreads-master]# cd /usr/local/php/etc/

[root@localhost etc]# cd /usr/local/php/etc/

[root@localhost etc]# cp php.ini php-cli.ini

[root@localhost pthreads-master]# echo extension = /usr/local/php/lib/php/extensions/no-debug-zts-20170718/pthreads.so >> /usr/local/php/etc/php-cli.ini

1、确认扩展存在

[root@localhost ~]# php -m| grep pthreads
pthreads

2、测试代码
将下面代码存为PHP文件test.php

<?php
class workerThread extends Thread {
public function __construct($i){
  $this->i=$i;
}

public function run(){
  while(true){
   echo $this->i;
   sleep(1);
  }
}
}

for($i=0;$i<50;$i++){
$workers[$i]=new workerThread($i);
$workers[$i]->start();
}

执行

[root@localhost ~]# php test.php 

结果有

1~49 一秒输出全部伤害就成功了

发表评论