【问题标题】:Apache2,pthreads. Fatal error. The apache2handler SAPI is not supported by pthreadsApache2,pthreads。致命错误。 pthreads 不支持 apache2handler SAPI
【发布时间】:2015-12-24 01:25:41
【问题描述】:

我的 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 致命错误:pthreads 不支持 apache2handler SAPI 在第 0 行的未知 PHP 致命错误:无法启动 pthreads 模块 在第 0 行 Unknown(0) 上的未知中:致命错误 - apache2handler pthreads Unknown(0) 不支持 SAPI:致命错误 - 无法 启动 pthreads 模块

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

我该如何解决这个问题?

【问题讨论】:

    标签: php ubuntu pthreads apache2 php-7


    【解决方案1】:

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

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

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

    您必须为命令行预留多线程,这样安全且合理。

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

    【讨论】:

    • 非常感谢!这是最有帮助的。
    • ...并且只在 CLI 中加载它”是什么意思?如何在 CLI 中加载它?当我运行 php -m 时,我看不到 pthreads 模块已加载。我错过了什么?好的。我找到了答案:../35201054/how-do-i-load-pthreads-extension-in-cli
    • 哇,我花了大约一天时间弄清楚如何使用 pthreads 手动构建 php7 并在 apache 中启用它,最后才发现这个
    猜你喜欢
    • 2018-07-31
    • 2013-08-28
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多