Класс ZMQContext не найден, хотя ZMQ установлен

6

Прежде всего, да, я знаю, что есть очень похожий вопрос, но ответ, данный там, не применим к моей ситуации, и нет никаких указаний на то, что он также исправил проблему другого человека.

У меня есть ZMQ, установленный на моем сервере Apache, согласно руководству, содержащемуся в документации Racthet. Я приложил все к успеху после многих разочарований, и я готов привести пример. Простой PHP script помещается в post.php и имеет эту строку (после некоторых довольно тривиальных PHP, устанавливающих переменные и т.д.):

$context = new ZMQContext();

Однако это вызывает эту ошибку:

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

Я включил 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 

Из этого я пришел к выводу, что такая же ошибка должна появиться, если я запустил php post.php из терминала. Однако в этом случае ошибки не было показано - кажется, что код PHP сделал свою часть. Итак, я устранил единственную возможную причину, которую я нашел в моем поиске до сих пор, и я ищу альтернативу.

У кого-нибудь есть решение, предложение, идея, что-нибудь вообще, что могло бы помочь прояснить это?

  • 0
    Если вы вызываете phpinfo() в том же файле, что и new ZMQContext() , выводится ли вывод, что ZeroMQ загружен (в разделе «Конфигурация»)?
  • 0
    ZMQContext принадлежит корневому пространству имен. Чтобы избежать путаницы и возможных ошибок, лучше всего создать контекст, используя $ctx = new \ZMQContext(); , Таким образом, вы можете устранить одну возможную ошибку. Если это не сработает, вы можете попробовать найти другие возможные ошибки.
Теги:

4 ответа

3

Я не использовал ZMQ, но это похоже на проблему с настройкой.

Сначала запустите PHP в cli и в apache можете использовать разные php.ini

Например, в ubuntu 12.04:

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

Чтобы проверить, загружается ли в настоящее время ZMQ в apache, создайте файл php, содержащий phpinfo();, и проверьте его вывод через веб-браузер, должна быть некоторая информация о ZMQ, используйте ctrl-f для поиска.

В cli php -m будет отображаться загруженный/скомпилированный модуль или расширение.

Во-вторых, версия ZMQ

Я не могу думать о другой причине, чем вы использовали версию ZMQ, которая не имеет ZMQContext? Вы можете проверить документ ZMQ и версию, которую вы использовали.

(Удалено, не должно быть этой проблемы в соответствии с сообщением об ошибке), пространство имен

если ZMQ правильно загружена, а ваш код все еще не работает, другой возможной причиной является использование пространства имен. Если ваш post.php похож на

<?php
namespace Some\NameSpace;
$context = new ZMQContext();

Тогда это означает ZMQContext в пространстве имен Some\NameSpace, полное quanlified имя класса - это Some\NameSpace\ZMQContext, которого не существует. Поэтому вам может понадобиться использовать \ZMQContext для класса из текущего пространства имен.

  • 0
    Я исключил опции 1 и 3 (проверил конфигурацию и удостоверился, что у меня последняя версия ZMQ). Я не уверен, что понимаю вариант № 2, не могли бы вы уточнить некоторые детали?
  • 0
    Пространства имен здесь не проблема, потому что PHP жалуется на ZMQContext , а не Some\NameSpace\ZMQContext .
Показать ещё 2 комментария
2

Если расширение включено, вам все равно нужно использовать это:

use \ZMQContext;
use \ZMQ;

(или, альтернативно, напрямую обращаться к ним с помощью ведущего "\" )

  • 0
    Круто, спасибо!
0

Вам необходимо перезапустить Apache перед использованием новых расширений. mod_php не добавляет модули во время выполнения

-2

Если вы используете Wampserver, скопируйте libzmq.dll файл в C:\wamp64\bin\apache\apache2.4.17\bin и перезапустите wamp.

  • 0
    extension=zmq.so тогда ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню