致命错误:未find类'ZMQContext'(但已安装并在terminal上运行)

我想尝试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文件。 这些可能是(但可以不同,取决于你的发行版):

  • Apache的/etc/php5/apache2/php.ini
  • CLI的/etc/php5/cli/php.ini

但是,/ /etc/php5/conf.d/目录中的所有.ini文件都将加载到Apache和CLI中。

另请参阅: PHP – 可以从apache访问外部类/库,但不能从phpunit访问 (与您的问题完全相反)

检查哪个php.ini文件被加载

检查(通过phpinfo )当通过nginx(这可能意味着通过php-fpm)请求加载哪个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