我想尝试ZeroMQ,我写了两个php文件,service.php和client.php。我用linux终端运行服务php /web/test/service.php
,没关系,终端打印一个"正在等待客户端连接…"
但是,我通过chrome explorer请求我的client.php,发生了错误,我检查了我的错误.log,有消息"php致命错误:找不到类'ZMQContext'……"
并且我使用命令php -m
来检查我的php扩展,zmq
已经在该列表中了。
问题是ZMQ模块加载在PHP CLI(命令行界面)中,但没有加载到Apache中。因此,service.php
可以从命令行顺利运行,但client.php
不能使用ZMQContext,因为Apache不加载ZMQ。
有两个不同的.ini
-文件。这些可能是(但可能不同,取决于您的发行版):
- Apache的
/etc/php5/apache2/php.ini
- CLI的
/etc/php5/cli/php.ini
但是,/etc/php5/conf.d/
目录中的所有.ini
文件都加载到Apache和CLI中。
另请参阅:PHP-外部类/库可以从apache访问,但不能从phpunit访问(与您的问题完全相反)
检查加载了哪些php.ini文件
当通过nginx(可能意味着通过php-fpm)请求时,检查(使用phpinfo
)哪些php.ini文件被加载——几乎可以肯定的是,它加载的ini文件与cli不同。假设使用php-fpm,可能会加载以下ini文件:
/etc/php5/fpm/php.ini
/etc/php5/fpm/conf.d/*
并且没有列出zmq.ini文件。
为php-fpm加载zmq
按照在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