我想尝试ZeroMQ,我写了两个php文件,service.php和client.php。
我使用linux终端运行服务php /web/test/service.php
,没关系,终端打印“等待客户端连接......”。
但是,我通过chrome explorer请求我的client.php,错误发生了,我检查了我的error.log,有消息“php致命错误:类'ZMQContext'找不到........”
我使用命令php -m
检查我的php扩展名,zmq
已经在该列表中。
答案 0 :(得分:6)
问题是ZMQ模块是在PHP CLI(命令行界面)中加载的,但它没有加载到Apache中。因此,service.php
从命令行顺利运行,但client.php
无法使用ZMQContext,因为Apache不加载ZMQ。
有两个不同的.ini
个文件。这些可能是(但可能会有所不同,取决于您的发行版):
/etc/php5/apache2/php.ini
适用于Apache /etc/php5/cli/php.ini
用于CLI 但是,.ini
目录中的所有/etc/php5/conf.d/
文件都会加载到Apache和CLI中。
另请参阅:PHP - An external Class/library is accessible from apache but not from phpunit(与您的问题完全相反)
答案 1 :(得分:2)
检查(使用phpinfo
)通过nginx请求加载哪些php.ini文件(这可能意味着通过php-fpm) - 几乎可以肯定地显示它加载的不同ini文件比cli。假设使用php-fpm,可能会加载以下ini文件:
/etc/php5/fpm/php.ini
/etc/php5/fpm/conf.d/*
并且没有列出zmq.ini文件。
关注instructions for installing zmq on php,为zeromq创建一个ini文件(或者从/etc/php5/cli/conf.d/
复制一个文件,因为显然它已加载用于cli用途):
# /etc/php5/conf.d/zeromq.ini
extension=zmq.so
然后重启php-fpm
sudo /etc/init.d/php5-fpm restart
zeromq应该可以使用。
答案 2 :(得分:0)
解决此问题的一个非常简单的方法是使用phpenmod全局启用ZMQ(cli + Apache)
例如使用php5
php5enmod zmq
service apache2 restart