注意:
现在仅支持 PHP 7.2+ 这是由于 PHP 7.0 和 7.1 上的 ZTS 模式存在安全问题。
摘自:https://github.com/krakjoe/pthreads停止 PHP 7.4 的 pthread 开发
我不再打算维护 pthread,也不想鼓励对其进行维护:我认为,这样做被设计所破坏并加以修复,根本不值得。
我已经开始开发与未来兼容的新扩展程序:https://github.com/krakjoe/parallel
尽管它与 pthreads 不兼容,也不会兼容,但我认为它是即将到来的 PHP 版本的唯一可行替代品,而我的重点必须放在这上面。
当 7.4 于今年年底进入 RC 阶段时,该存储库将被存档,并且在 PECL 或此存储库中不会再发布 pthread。感谢贡献者对 pthread 所做的所有努力,您辛勤工作,我对此表示赞赏,并且我想请今天专注 pthread 的任何人都将重点转移到未来和 parallel。
接自:https://github.com/krakjoe/pthreads/issues/929
pthreads 是一组允许用户在 PHP 中使用多线程技术的面向对象的 API。 它提供了创建多线程应用所需的全套工具。 通过使用 Thread, Worker 以及 Threaded 对象,PHP 应用可以创建、读取、写入以及执行多线程应用,并可以在多个线程之间进行同步控制。
建议使用 parallel 作为替代。
不可以在 web 服务器环境中使用 pthreads 扩展, PHP 多线程开发仅限于命令行模式的应用。
只能在 PHP 7.2+ 版本中使用 pthreads (v3) 扩展, 在 PHP 7.0 和 7.1 版本中,ZTS 模式是不安全的。
摘自:
https://www.php.net/manual/zh/intro.pthreads.php
本文以 php 5.6.9 为示例,7.0 也可按如下进行。
1、确定当前是否安装
C:\Users\Administrator>D:\php\php-5.6.9\php -m | grep pt mcrypt pthreads
如果存在 pthreads 则表明已经安装。
2、确定 PHP 编译信息
C:\Users\Administrator>D:\php\php-5.6.9\php -i | more
你可以看到 phpinfo() 信息。需要留意:
Compiler => MSVC11 (Visual C++ 2012) Architecture => x86 PHP API => 20131106 PHP Extension => 20131226 Zend Extension => 220131226 Zend Extension Build => API220131226,TS,VC11 PHP Extension Build => API20131226,TS,VC11
由此可知
x86 环境,MSVC11 编译的并且是线程安全的(TS),API版本是 API220131226;如果是 NTS 则表明是非线程安全的。将不能使用 pthreads 扩展。
另外 pthreads 只能在 CLI 模式下使用。
在 https://windows.php.net/downloads/pecl/releases/pthreads/ 手动筛选
版本对应关系。
也可以通过此表:
PHP 版本 | pthreads 版本 | 下载 |
---|---|---|
以下列表仅供参考,并不保证最新,请手动查询最新版本。 | ||
7.0-ts-vc14-x64 | 2.0.9 | 下载 |
5.4-ts-vc9-x86 | ||
5.5-ts-vc11-x64 | ||
5.5-ts-vc11-x86 | ||
5.6-ts-vc11-x64 | ||
5.6-ts-vc11-x64 | ||
5.6-ts-vc11-x86 | 7.0-ts-vc14-x64 | 3.1.6 | 下载 |
7.0-ts-vc14-x86 | 7.2-ts-vc15-x64 | 3.2.0 | 下载 |
7.2-ts-vc15-x86 |
3、下载对应版本
像 PHP 5.6 人工对比,对应 2.0.9。
则在,
php_pthreads-2.0.9 中,
php_pthreads-2.0.9–5.6–ts–vc11–x86.zip,便是所需要的扩展。
其中:2.0.9 是 pthreads 版本。5.6 是 PHP 版本 TS 表明是线程安全。vc11 表明编译器,x86 表明编译环境。
这些基于信息 php -i 中的信息一致才可以。
否则会报,
加载错误的扩展在 php -v 命令时,会报以下错误:
PHP Warning: PHP Startup: Unable to load dynamic library ‘D:/php/php-5.6.9/ext\php_pthreads.dll’
或者,类似以下报错消息:
PHP Warning: PHP Startup: pthreads: Unable to initialize module
Module compiled with module API=20121212
PHP compiled with module API=20131226
These options need to match in Unknown on line 0
这都表明 php_pthreads 版本号、编译环境、API 版本不一致。你需要下载正确版本的扩展。
4、复制 dll 文件
打开下载的压缩包:
并将 php_pthreads.dll 复制到 php-5.6.9\ext 目录下。
将 pthreadVC2.dll 复制到 php-5.6.9 目录下。
5、修改配置
php.ini 配置文件中,搜索 extension_dir 项,
找到
;extension_dir = “ext”
并删除前面的 ; 号。
即
extension_dir = “ext”
搜索 Windows Extensions 项,他的下方有很多已经加载的扩展(dll 文件),在其中新增一行:
extension=php_pthreads.dll
保存配置配置,并在命令行中,输入 php -v 无报错,将显示 PHP 版本信息,表明扩展加载成功。
至此本文结束。
另外,Linux 下参考:
相关: