Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
845 views
in Technique[技术] by (71.8m points)

php - Class ZMQContext not found even though ZMQ is installed

First of all, yes I am aware that there is a very similar question out there, but the answer given there doesn't apply to my situation, and there's no indication that it fixed the other person's problem either.

I have ZMQ installed on my Apache server, according to the tutorial found in the Racthet documentation. I installed everything successfully after a lot of frustration, and I am ready to run an example. The simple PHP script is placed in post.php and features this line (after some rather trivial PHP, setting variables etc):

$context = new ZMQContext();

However, it throws this error:

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

I have included extension=zmq.so at the end of my only used php.ini file, as the zeromq documentation suggested. To make sure Apache is loading the same php.ini as the page, I checked. Apache gave me exactly the same info as running phpinfo() on the page:

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

From this I concluded that the same error should appear if I run php post.php from the terminal. However, no error was shown in this case - it seems the PHP code did its part. So, I have eliminated the only possible root cause that I have found in my search so far, and I am looking for an alternative.

Anyone have a solution, suggestion, idea, anything at all that could help clear this up?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I have not used ZMQ but this seems like a configure problem.

First, run PHP in cli and in apache can use different php.ini

Eg in ubuntu 12.04:

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

To check if ZMQ is currently loaded in apache, create a php file contains phpinfo(); and check it's output through web browser, there should be some info about ZMQ, use ctrl-f to search for it.

In cli, php -m will show loaded/compiled module or extension.

Second, ZMQ version

I can't thought other reason than you used a ZMQ version which hasn't ZMQContext ? You could check ZMQ document and the version you used.

(Deleted, should not be this problem according error message), namespace

if ZMQ is currectly loaded, and your code still doesn't work, the another possible reason is use of namespace. If your post.php is like

<?php
namespace SomeNameSpace;
$context = new ZMQContext();

Then it means ZMQContext in namespace SomeNameSpace, the full quanlified classname is SomeNameSpaceMQContext, which doesn't exists. So you may need use MQContext for class out of current namespace.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...