我的ubuntu上有apache2 web服务器.我需要安装pthreads,所以我从rep(copy到/ 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’.
然后我在console中执行了下一个命令:
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 Fatal error: The apache2handler SAPI is not supported by pthreads
in Unknown on line 0 PHP Fatal error: Unable to start pthreads module
in Unknown on line 0 Unknown(0) : Fatal error – The apache2handler
SAPI is not supported by pthreads Unknown(0) : Fatal error – Unable to
start pthreads module
如果我配置没有–enable-pthreads的php7,它的工作原理.我执行了phpinfo()并得到了结果.
我怎么解决这个问题?
解决方法:
pthreads v3禁止加载除CLI之外的任何内容.
为响应客户端,在Web服务器上下文中创建线程从未有意义.创建除服务器创建的线程之外的线程,破坏稳定性和可伸缩性.
在其他多线程,多进程应用程序中创建多线程应用程序,没有任何正确的方法使应用程序正确识别并为另一方做好准备,这是一个可怕的想法;它无法可靠地工作,因此被禁用.
您必须为命令行保留多线程,这是安全且合理的.
构建pthreads共享(–enable-pthreads = shared),并仅在CLI中加载它将解决您的问题.