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

jov*_*van 9 php apache

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

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

$context = new ZMQContext();
Run Code Online (Sandbox Code Playgroud)

但是,它会抛出此错误:

Fatal error: Class 'ZMQContext' not found in /home/lights/public_html/apps/post.php on line 12
Run Code Online (Sandbox Code Playgroud)

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

Configuration File (php.ini) Path   /usr/local/lib
Loaded Configuration File   /usr/local/lib/php.ini 
Run Code Online (Sandbox Code Playgroud)

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

任何人都有解决方案,建议,想法,任何可以帮助清除这一点的东西?

Fwo*_*olf 5

我没有使用过 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
Run Code Online (Sandbox Code Playgroud)

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

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

二、ZMQ版本

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

(已删除,根据报错信息应该不是这个问题)、namespace

如果 ZMQ 当前已加载,但您的代码仍然无法运行,另一个可能的原因是使用了命名空间。如果你的 post.php 是这样的

<?php
namespace Some\NameSpace;
$context = new ZMQContext();
Run Code Online (Sandbox Code Playgroud)

那么它表示命名空间Some\NameSpace中的ZMQContext,完整的限定类名是Some\NameSpace\ZMQContext,它不存在。所以你可能需要使用\ZMQContext当前命名空间之外的类。


Mar*_*hli 4

如果扩展已启用,您仍然需要使用它:

use \ZMQContext;
use \ZMQ;
Run Code Online (Sandbox Code Playgroud)

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