致命错误:未找到类'ZMQContext'(但它已安装并在终端上运行)

时间:2013-07-27 09:14:39

标签: php nginx

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

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

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

3 个答案:

答案 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)

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

检查(使用phpinfo)通过nginx请求加载哪些php.ini文件(这可能意味着通过php-fpm) - 几乎可以肯定地显示它加载的不同ini文件比cli。假设使用php-fpm,可能会加载以下ini文件:

/etc/php5/fpm/php.ini
/etc/php5/fpm/conf.d/*

并且没有列出zmq.ini文件。

加载zmq for php-fpm

关注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