即使安装了ZMQ,也找不到类ZMQContext

时间:2013-11-27 20:39:18

标签: php apache

首先,是的,我知道那里有一个非常相似的问题,但那里给出的答案并不适用于我的情况,也没有迹象表明它解决了另一个人的问题。

根据Racthet文档中的教程,我的Apache服务器上安装了ZMQ。经过很多挫折后我成功地安装了所有东西,我准备好运行一个例子。简单的PHP脚本放在post.php中并以此行为特色(在一些相当简单的PHP之后,设置变量等):

$context = new ZMQContext();

但是,它会抛出此错误:

Fatal error: Class 'ZMQContext' not found in /home/lights/public_html/apps/post.php on line 12

我在使用的php.ini文件末尾包含了extension=zmq.so,正如zeromq文档所建议的那样。为了确保Apache加载与页面相同的php.ini,我检查了。 Apache给了我与在页面上运行phpinfo()完全相同的信息:

Configuration File (php.ini) Path   /usr/local/lib
Loaded Configuration File   /usr/local/lib/php.ini 

由此我得出结论,如果我从终端运行php post.php,则会出现相同的错误。但是,在这种情况下没有显示错误 - 似乎PHP代码确实发挥了作用。所以,到目前为止,我已经消除了我在搜索中找到的唯一可能的根本原因,我正在寻找替代方案。

任何人都有解决方案,建议,想法,还有什么可以帮助解决这个问题?

4 个答案:

答案 0 :(得分:4)

我没有使用过ZMQ,但这似乎是一个配置问题。

首先,在cli中运行PHP,在apache中可以使用不同的php.ini

例如在ubuntu 12.04中:

/etc/php5/apache2/php.ini is used for apache
/etc/php5/cli/php.ini is used for cli

要检查ZMQ当前是否在apache中加载,创建一个包含phpinfo();的php文件并通过Web浏览器检查它的输出,应该有一些关于ZMQ的信息,使用ctrl-f来搜索它。

在cli中,php -m将显示已加载/已编译的模块或扩展名。

第二,ZMQ版本

我不能想到除了使用没有ZMQContext的ZMQ版本之外的其他原因?您可以查看ZMQ文档和您使用的版本。

(删除,不应该是根据错误消息的问题),命名空间

如果ZMQ当前已加载,并且您的代码仍无效,则另一个可能的原因是使用命名空间。如果你的post.php就像

<?php
namespace Some\NameSpace;
$context = new ZMQContext();

然后它表示命名空间Some \ NameSpace中的ZMQContext,完整的quanlified类名是Some \ NameSpace \ ZMQContext,它不存在。因此,您可能需要将\ZMQContext用于当前命名空间的类。

答案 1 :(得分:4)

如果启用了扩展程序,您仍然需要使用此功能:

use \ZMQContext;
use \ZMQ;

(或者使用前导“\”直接访问它们)

答案 2 :(得分:0)

您需要在使用新扩展程序之前重新启动Apache。 mod_php在运行时不添加模块

答案 3 :(得分:-2)

如果您使用Wampserver,请将libzmq.dll文件复制到C:\wamp64\bin\apache\apache2.4.17\bin并重新启动wamp。