首先,是的,我知道那里有一个非常相似的问题,但那里给出的答案并不适用于我的情况,也没有迹象表明它解决了另一个人的问题。
根据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代码确实发挥了作用。所以,到目前为止,我已经消除了我在搜索中找到的唯一可能的根本原因,我正在寻找替代方案。
任何人都有解决方案,建议,想法,还有什么可以帮助解决这个问题?
答案 0 :(得分:4)
我没有使用过ZMQ,但这似乎是一个配置问题。
例如在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
将显示已加载/已编译的模块或扩展名。
我不能想到除了使用没有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。