Прежде всего, да, я знаю, что есть очень похожий вопрос, но ответ, данный там, не применим к моей ситуации, и нет никаких указаний на то, что он также исправил проблему другого человека.
У меня есть 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 сделал свою часть. Итак, я устранил единственную возможную причину, которую я нашел в моем поиске до сих пор, и я ищу альтернативу.
У кого-нибудь есть решение, предложение, идея, что-нибудь вообще, что могло бы помочь прояснить это?
Я не использовал ZMQ, но это похоже на проблему с настройкой.
Например, в 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, которая не имеет ZMQContext? Вы можете проверить документ ZMQ и версию, которую вы использовали.
если ZMQ правильно загружена, а ваш код все еще не работает, другой возможной причиной является использование пространства имен. Если ваш post.php похож на
<?php
namespace Some\NameSpace;
$context = new ZMQContext();
Тогда это означает ZMQContext в пространстве имен Some\NameSpace, полное quanlified имя класса - это Some\NameSpace\ZMQContext, которого не существует. Поэтому вам может понадобиться использовать \ZMQContext
для класса из текущего пространства имен.
ZMQContext
, а не Some\NameSpace\ZMQContext
.
Если расширение включено, вам все равно нужно использовать это:
use \ZMQContext;
use \ZMQ;
(или, альтернативно, напрямую обращаться к ним с помощью ведущего "\" )
Вам необходимо перезапустить Apache перед использованием новых расширений. mod_php не добавляет модули во время выполнения
Если вы используете Wampserver, скопируйте libzmq.dll
файл в C:\wamp64\bin\apache\apache2.4.17\bin
и перезапустите wamp.
extension=zmq.so
тогда ...
phpinfo()
в том же файле, что иnew ZMQContext()
, выводится ли вывод, что ZeroMQ загружен (в разделе «Конфигурация»)?ZMQContext
принадлежит корневому пространству имен. Чтобы избежать путаницы и возможных ошибок, лучше всего создать контекст, используя$ctx = new \ZMQContext();
, Таким образом, вы можете устранить одну возможную ошибку. Если это не сработает, вы можете попробовать найти другие возможные ошибки.