3

我的 ubuntu 上有 apache2 网络服务器。我需要安装pthreads,所以我从rep(复制到/ext/)克隆了一个php7和pthreads的源代码。我为php安装了所有库,然后我跑了

./buildconf 

./configure --prefix=/usr --with-config-file-path=/etc --enable-bcmath --enable-calendar --enable-cli --enable-debug --enable-dba --enable- exif --enable-ftp --enable-gd-native-ttf --enable-mbregex --enable-mbstring --enable-pcntl --enable-shmop --enable-soap --enable-opcache --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --enable-zip --enable-maintainer-zts --with-freetype-dir=/usr/local/opt/freetype -- with-openssl --with-gd --with-gettext=/usr/local/opt/gettext --with-iconv-dir=/usr --with-icu-dir=/usr --with-mhash --with -jpeg-dir=/usr/local/opt/jpeg --with-kerberos=/usr --with-libedit --with-mhash --with-png-dir=/usr/local/opt/libpng --with -zlib=/usr --with-apxs2=/usr/bin/apxs--libexecdir=/usr/local/php7/7.0.0/libexec --with-bz2=/usr --enable-fpm --with-fpm-user=_www --with-fpm-group=_www --with -curl --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-mcrypt --enable-pthreads

它完成得很好,我执行了“make”和“make install”。然后我在控制台中执行了下一个命令:

sudo a2dismod php5
sudo cp /etc/apache2/mods-available/php5.conf /etc/apache2/mods-enabled/php7.conf
sudo rm -rf /usr/bin/php && sudo ln -s /etc /usr/bin/php
sudo service apache2 restart

通过这种方式,我得到了带有 php7 的 apache2,但它并没有启动并为我提供日志:

PHP致命错误:第0行未知中的pthreads不支持apache2handler SAPI PHP致命错误:无法在第0行未知中启动pthreads模块未知(0):致命错误-pthreads未知(0)不支持apache2handler SAPI ) : 致命错误 - 无法启动 pthreads 模块

如果我在没有 --enable-pthreads 的情况下配置 php7,它可以工作。我执行了 phpinfo() 并得到了结果。

我怎么解决这个问题?

4

1 回答 1

8

pthreads v3 禁止加载 CLI 以外的任何内容。

在 Web 服务器上下文中创建线程以响应客户端从来没有意义。在服务器创建的线程之外创建线程会破坏稳定性和可伸缩性。

在其他多线程、多进程应用程序中创建多线程应用程序,而没有任何体面的方法让任何一个应用程序正确感知并为另一个应用程序做好准备,这是一个糟糕的主意;它不能可靠地工作,因此被禁用。

您必须为命令行保留多线程,它是安全且明智的。

构建共享的 pthreads (--enable-pthreads=shared),并仅在 CLI 中加载它可以解决您的问题。

于 2015-09-27T04:06:08.143 回答