[[IT知识]] 如何在Ubuntu上启用PHP线程安全并安装pthreads扩展

[复制链接]
查看: 45|回复: 0
发表于 3 天前 | 显示全部楼层 | 阅读模式
易博V9下载

如何在Ubuntu上启用PHP线程安全并安装pthreads扩展

一、环境

ubuntu 14 + lnmp一键安装

二、问题

使用Lnmp安装自然是方便,一键部署,但正因为全自动部署,很多配置选项都是Lnmp自动设置好了,比如php的线程安全,默认就被disabled了

Thread Safety disabled

一开始查阅了很多资料,php要支持多线程,可以选择安装pthreads拓展,但这个拓展必需要php 的 Thread Safety 是 enabled,这就必需要重新编译php了,百度了一大堆有的没有,都没能解决,即然后我用了lnmp一键安装包,那就从官方找找解决方案,我用的是lnmp 1.4, 果然官方说要升级PHP时,如果要加自定义参数,可在 lnmp.conf 中自行加入参数

  1. PHP_Modules_Options='' // 在引号中加入自定义参数
复制代码

通过查询资料得知,需开启PHP ZTS 需在编译时加入 --enable-mAIntainer-zts 参数

那就简单啦,修改成:

  1. PHP_Modules_Options='--enable-maintainer-zts'
复制代码

保存好配置文件,再升级PHP版本,即执行lnmp目录中的 upgrade.sh

下面只剩等待了~~~~

更新完成后,使用

  1. [root@localhost ~]# php -v
复制代码
  1. PHP 7.1.32 (cli) (built: Sep 16 2019 11:40:03) ( ZTS )
  2. Copyright (c) 1997-2018 The PHP Group
  3. Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
复制代码

看到上面的 (ZTS)即表示已经是线程安全了

三、pthreads的安装

  1. [root@localhost ~]# wget https://codeload.github.com/krakjoe/pthreads/zip/master
  2. [root@localhost ~]# unzip master
  3. [root@localhost ~]# cd pthreads-master/
  4. [root@localhost pthreads-master]# phpize
  5. [root@localhost pthreads-master]#./configure --with-php-config=/usr/local/php/bin/php-config
  6. [root@localhost pthreads-master]# make && make install
  7. [root@localhost pthreads-master]# cd /usr/local/php/etc/
  8. [root@localhost etc]# cp php.ini php_bak.ini // 备份一下
  9. [root@localhost pthreads-master]# echo extension = /usr/local/php/lib/php/extensions/no-debug-zts-20170718/pthreads.so >> /usr/local/php/etc/php.ini
复制代码

再确认下拓展

  1. [root@localhost ~]# php -m| grep pthreads
  2. pthreads
复制代码

测试代码

将下面代码存为PHP文件test.php

  1. <?php
  2. //实现多线程必须继承Thread类
  3. class test extends Thread {
  4. public function __construct($arg){
  5. $this->;arg = $arg;
  6. }
  7. //当调用start方法时,该对象的run方法中的代码将在独立线程中异步执行。
  8. public function run(){
  9. if($this->;arg){
  10. printf("Hello %s\n", $this->;arg);
  11. }
  12. }
  13. }
  14. $thread = new test("World");
  15. if($thread->;start()) {
  16. //join方法的作用是让当前主线程等待该线程执行完毕
  17. //确认被join的线程执行结束,和线程执行顺序没关系。
  18. //也就是当主线程需要子线程的处理结果,主线程需要等待子线程执行完毕
  19. //拿到子线程的结果,然后处理后续代码。
  20. $thread->;join();
  21. }
  22. ?>;
复制代码

运行测试下即可

易博软件介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表