Class 未找到 ZMQContext
Class ZMQContext not found
我是 运行 nginx 1.4.6 和 php 5.5 上的网络服务器,在 Ubuntu 14.04 的虚拟机中,需要安装 ZeroMQ 扩展。我已按照 ZMQ (the section To build on UNIX-like systems), added php language binding as instructed here 上的说明进行操作,根据我的 php 版本对其进行了编译,并添加了行
extension=zmq.so
到 /etc/php5/cli/php.ini
以及 /etc/php5/fpm/php.ini
,这是我唯一的 .ini
个文件。
重新启动 nginx
和 php-fpm
后 php -i
显示如下:
$ php -i | grep -i zmq
zmq
ZMQ extension => enabled
ZMQ extension version => @PACKAGE_VERSION@
libzmq version => 4.0.4
所以 ZMQ 模块安装在 cli 中,但是当我访问带有 phpinfo();
的页面时,我没有看到 ZMQ 模块配置部分,当我访问该页面时,代码 $context = new \ZMQContext();
被调用,我收到 error 消息:
Class 'ZMQContext' not found".
ZMQ 模块显然已在 cli 中正确加载,但由于某些原因在 php-fpm 中无法识别。我仔细检查了 fpm php.ini
是否已加载并且带有扩展名的行在那里。
我还有一个脚本 push-server.php
,它在 Ratchet 循环中运行一个单独的 websocket 服务器,并监听要推送给订阅者的传入消息:
<?php
require dirname(__DIR__) . '/vendor/autoload.php';
require dirname(__DIR__) . '/app/libs/Pusher/Pusher.php';
$loop = React\EventLoop\Factory::create();
$pusher = new App\Libs\Pusher\Pusher; // my own pusher implementation
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', [$pusher, 'onMessageEntry']);
$pull->on('subscribe', [$pusher, 'onSubscribe']);
$webSock = new React\Socket\Server($loop);
$webSock->listen(8099, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
$loop->run();
执行 php push-server.php
后,它运行没有错误,因此 ZMQ 模块在 cli 中正确加载。
我已经尝试过 here, but no luck. There is a similar question here 建议的内容,但主要针对 windows 和 wamp 服务器,目前还没有答案。
有人知道为什么会这样吗?将不胜感激。
升级PHP到5.6后问题消失,所有模块加载无问题。
我是 运行 nginx 1.4.6 和 php 5.5 上的网络服务器,在 Ubuntu 14.04 的虚拟机中,需要安装 ZeroMQ 扩展。我已按照 ZMQ (the section To build on UNIX-like systems), added php language binding as instructed here 上的说明进行操作,根据我的 php 版本对其进行了编译,并添加了行
extension=zmq.so
到 /etc/php5/cli/php.ini
以及 /etc/php5/fpm/php.ini
,这是我唯一的 .ini
个文件。
重新启动 nginx
和 php-fpm
后 php -i
显示如下:
$ php -i | grep -i zmq
zmq
ZMQ extension => enabled
ZMQ extension version => @PACKAGE_VERSION@
libzmq version => 4.0.4
所以 ZMQ 模块安装在 cli 中,但是当我访问带有 phpinfo();
的页面时,我没有看到 ZMQ 模块配置部分,当我访问该页面时,代码 $context = new \ZMQContext();
被调用,我收到 error 消息:
Class 'ZMQContext' not found".
ZMQ 模块显然已在 cli 中正确加载,但由于某些原因在 php-fpm 中无法识别。我仔细检查了 fpm php.ini
是否已加载并且带有扩展名的行在那里。
我还有一个脚本 push-server.php
,它在 Ratchet 循环中运行一个单独的 websocket 服务器,并监听要推送给订阅者的传入消息:
<?php
require dirname(__DIR__) . '/vendor/autoload.php';
require dirname(__DIR__) . '/app/libs/Pusher/Pusher.php';
$loop = React\EventLoop\Factory::create();
$pusher = new App\Libs\Pusher\Pusher; // my own pusher implementation
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', [$pusher, 'onMessageEntry']);
$pull->on('subscribe', [$pusher, 'onSubscribe']);
$webSock = new React\Socket\Server($loop);
$webSock->listen(8099, '0.0.0.0');
$webServer = new Ratchet\Server\IoServer(
new Ratchet\Http\HttpServer(
new Ratchet\WebSocket\WsServer(
new Ratchet\Wamp\WampServer(
$pusher
)
)
),
$webSock
);
$loop->run();
执行 php push-server.php
后,它运行没有错误,因此 ZMQ 模块在 cli 中正确加载。
我已经尝试过 here, but no luck. There is a similar question here 建议的内容,但主要针对 windows 和 wamp 服务器,目前还没有答案。
有人知道为什么会这样吗?将不胜感激。
升级PHP到5.6后问题消失,所有模块加载无问题。