我想试试 ZeroMQ,我写了两个 php 文件,service.php 和 client.php。我用linux终端运行服务php /web/test/service.php
,没关系,终端打印“等待客户端连接...”。
但是,我通过 chrome 浏览器请求我的 client.php,发生错误,我检查了我的 error.log,有消息“php 致命错误:找不到类 'ZMQContext'......”
我使用命令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
用于 CLI但是,.ini
该目录中的所有文件/etc/php5/conf.d/
都加载到 Apache 和 CLI 中。
另请参阅:PHP - 可以从 apache 访问外部类/库,但不能从 phpunit 访问(与您的问题完全相反)
当通过 nginx(这可能意味着通过 php-fpm)请求时,检查(用phpinfo
)加载了哪些 php.ini 文件 - 几乎可以肯定会发现它加载了与 cli 不同的 ini 文件。假设使用 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