我已经好几个星期无法安装 pthreads 了。我将列出错误日志,然后列出我的配置选项。
这些是我收到的错误:
(Apache 错误日志)
apache2handler SAPI 在第 0 行的未知中不受 pthreads 支持
apachectl -V 输出
Server version: Apache/2.4.18 (Unix) Server built: Jan 10 2016 14:54:48 Server's Module Magic Number: 20120211:52 Server loaded: APR 1.4.8, APR-UTIL 1.5.2 Compiled using: APR 1.4.8, APR-UTIL 1.5.2 Architecture: 64-bit
Server MPM: worker
threaded: yes (fixed thread count) forked: yes (variable process count)
同时 PHP 错误日志:
(PHP 错误日志)
bin/php -m
PHP Warning: Module 'pthreads' already loaded in Unknown on line 0 [PHP Modules] Core date pcre
pthreads
Reflection SPL standard
没有其他ini
文件加载extension=pthreads.so
,所有这些错误仅当我将其包含extension=pthreads.so
在php-cli.ini
文件中时才会发生。
不带php-cli.ini
文件时,php -m
列出这些模块:bin/php -m
[PHP Modules] Core date pcre Reflection SPL standard
在此刻PHP 和 APACHE除了无法识别 pthreads 类外,其他都运行正常。
Apache 配置选项
./configure \ --prefix=path/apache \ --exec-prefix=path/apache \ --with-pcre=path/apache/pcre \ --enable-module=so \ --with-mpm=worker
PHP 配置选项
./configure \ --prefix=path \ --exec-prefix=path \ --with-apxs2=path/apache/bin/apxs \ --with-config-file-scan-dir=path/php/lib \ --with-config-file-path=path/php/lib \ --disable-all \ --enable-maintainer-zts \ --enable-pthreads=shared
答案1
因为,apache(PHP-CGI)一次又一次不支持 pthreads,只有 CLI 版本才支持
https://github.com/krakjoe/pthreads
SAPI 支持
pthreads v3 仅限于在 CLI 中操作:我花了很多年试图解释 Web 服务器中的线程根本没有意义,在对 pthreads 进行 1,111 次提交后,我意识到,我的建议并没有被重视。
因此,我提出这个建议是基于一个确定的事实:除了 CLI 之外,您无法在任何地方安全且合理地使用 pthreads。
感谢收听 ;)
答案2
到目前为止,我想您知道为什么会收到该错误。如果您想在 CLI 和 JUST CLI 中使用 pthreads(您知道为什么)而不在 apache 中加载它,您有两个选择。1- 使用 --enable-pthreads=shared 选项编译 php。为此,您应该在 /path/php/ext 中下载 pthreads 并删除配置文件,然后执行 ./buildconf --force 以构建干净的配置,最后 ./configure --enable-pthreads=shared 将正常工作。不要在 php.ini 中添加此扩展。2- 使用 phpize 编译 pthreads 源并使用 -d extension={path_to_pthreads.so} 运行任何 php 脚本。