Ubuntu中带有PHP7的ZeroMQ无法编译(“错误:参数太多,无法运行”)


ZeroMQ with PHP 7 in Ubuntu does not compile ("error: too many arguments to function")

我已经将php5.6升级到php7,但zeromq扩展带来了很多问题。在哪里可以下载php7的正确zmq.so文件?没有一个官方网站提供php7的有效版本(我使用的是apache2.4)

我遵循了以下教程:如何安装ZeroMQ。

步骤"安装ZeroMQ"运行良好,但第二步"安装PHP绑定"在我执行命令"make"时失败,并出现以下错误:

"/home/puser/zeromq-4.1.4/php-zmq/zmq.c:2740:2: error: too many arguments to 
function 'zend_register_internal_class_ex' php_zmq_device_exception_sc_entry = 
zend_register_internal_class_ex(&ce_device_exception, php_zmq_exception_sc_entry, 
"ZMQException" TSRMLS_CC)  ^ In file included from /usr/include/php/20151012/main/php.h:40:
0, from /home/puser/zeromq-4.1.4/php-zmq/php_zmq.h:45,from /home/puser/zeromq-4.1.4/php-zmq
/zmq.c:31:/usr/include/php/20151012/Zend/zend_API.h:290:28: note: declared here ZEND_API 
zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, 
zend_class_entry *parent_ce);"

使用php5.6时,不会出现此错误。如何解决此问题?

编辑

我在这篇文章中发现ZeroMQ目前"无法使用"php7:ZeroMQ安装。有什么变通办法吗?

有一个测试版可以通过PECL安装,我一直在使用它,没有任何问题。

sudo apt-get install php-pear
pecl install zmq-beta

如果你在安装过程中遇到错误,那么你很可能会丢失一些依赖项

sudo apt-get install php7.0-dev libzmq-dev pkg-config

对于MacOS,您可以用brew替换apt-get,它也应该可以工作。


更新时间:2017年8月17日

在Ubuntu/Debian的新版本中,您现在可以进行

sudo apt-get install php-zmq

与前面的方法相比,这是推荐的,因为它使用了底层ZeroMQ库的较新版本,并负责为您启用扩展。

我刚刚发布了在Debian或Ubuntu 16.04上使用php7安装zmq和php-zmq的所有步骤:在Debian和Ubuntu 上安装zmq和php-zmq

我在php 7.0/7.1/7.2上创建了一些功能齐全的版本(尚未在php 7.3上运行)

首先,安装编译器包:

apt-get -y install gcc make autoconf pkg-config

之后,取决于你的ubuntu版本。

  • 12.04/14.04/16.04:

    apt-get-y安装libzmq-dev

  • 18.04或更新:

    apt-get-y安装libzmq3 dev

X.Y依赖于您的php版本(7.0/7.1/7.2)

peclX.Y-sp install zmq-beta

当提示信息时:

请提供libzmq安装的前缀只需按ENTER

之后:

bash -c "echo extension=zmq.so > /etc/phpX.Y-sp/conf.d/zmq.ini"
service phpX.Y-fpm-sp restart

这种意愿应该奏效。

可以验证ZQLIB版本:

phpX.Y-sp -i | grep zmq

现在有一个新的PHP 7版本:https://pecl.php.net/package/zmq/1.1.3