我想尝试ZeroMQ,我写了两个PHP文件,service.php和client.php。 我使用linuxterminal运行服务php /web/test/service.php
,没关系,terminal打印一个“等待客户端连接…”。
但是,我通过chrome资源pipe理器请求我的client.php,发生错误,我检查我的error.log,有消息“php致命错误:class'ZMQContext'not found ……..”
我使用命令php -m
来检查我的php扩展, zmq
已经在那个列表中。
问题在于,ZMQ模块在PHP CLI(命令行界面)中加载,但没有加载到Apache中。 因此, service.php
可以从命令行顺利运行,但是client.php
不能使用ZMQContext,因为Apache不加载ZMQ。
有两个不同的.ini
文件。 这些可能是(但可以不同,取决于你的发行版):
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
但是,/ /etc/php5/conf.d/
目录中的所有.ini
文件都将加载到Apache和CLI中。
另请参阅: PHP – 可以从apache访问外部类/库,但不能从phpunit访问 (与您的问题完全相反)
检查(通过phpinfo
)当通过nginx(这可能意味着通过php-fpm)请求加载哪个php.ini文件 – 几乎肯定会显示它加载的不同ini文件比cli。 假设使用php-fpm,以下ini文件可能被加载:
/etc/php5/fpm/php.ini /etc/php5/fpm/conf.d/*
并没有列出zmq.ini文件。
按照说明在php上安装zmq ,并为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应该可以使用。
解决这个问题的一个非常简单的方法是使用phpenmod在全局启用ZMQ(cli + Apache)
例如用php5
php5enmod zmq service apache2 restart