Я запускаю веб-сервер на nginx 1.4.6 и php 5.5 внутри виртуальной машины с Ubuntu 14.04 и вам нужно установить расширение ZeroMQ. Я выполнил инструкции по ZMQ (раздел « Построить на UNIX-подобных системах» ), добавил привязку языка php, как указано здесь , скомпилировал его против моей версии 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();
, я получаю сообщение об ошибке :
Класс «ZMQContext» не найден ».
Модуль ZMQ, очевидно, правильно загружен в cli, но по какой-то причине он не распознается в php-fpm. Я дважды проверил, что загружен fpm php.ini
и что существует линия с расширением.
У меня также есть скрипт push-server.php
который запускает отдельный сервер websocket в цикле с Ratchet и слушает, что входящие сообщения должны быть переданы подписчикам:
<?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 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.
Я уже пробовал вещи, предлагаемые здесь , но не повезло. Здесь есть аналогичный вопрос, но он ориентирован на Windows и Wamp Server, и до сих пор без ответа.
Кто-нибудь знает, почему это происходит? Он будет высоко оценен.
Проблема исчезла после обновления PHP до 5.6, все модули загружаются без проблем.