5

我想试试 ZeroMQ,我写了两个 php 文件,service.php 和 client.php。我用linux终端运行服务php /web/test/service.php,没关系,终端打印“等待客户端连接...”。

但是,我通过 chrome 浏览器请求我的 client.php,发生错误,我检查了我的 error.log,有消息“php 致命错误:找不到类 'ZMQContext'......”

我使用命令php -m检查我的 php 扩展名,zmq已经在该列表中。

4

3 回答 3

7

问题是 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 访问(与您的问题完全相反)

于 2013-07-27T09:24:29.580 回答
4

检查加载了哪些 php.ini 文件

当通过 nginx(这可能意味着通过 php-fpm)请求时,检查(用phpinfo)加载了哪些 php.ini 文件 - 几乎可以肯定会发现它加载了与 cli 不同的 ini 文件。假设使用 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 应该可以使用。

于 2013-07-27T09:46:41.723 回答
0

解决此问题的一个非常简单的方法是使用 phpenmod 全局启用 ZMQ(cli + Apache)

例如用 php5

php5enmod zmq
service apache2 restart
于 2017-11-02T12:54:03.330 回答