Прежде всего, да, я знаю, что есть очень похожий вопрос, но ответ, данный там, не применим к моей ситуации, и нет никаких признаков того, что он также исправил проблему другого человека.
У меня есть ZMQ, установленный на моем сервере Apache, согласно руководству, содержащемуся в документации Racthet. Я приложил все к успеху после многих разочарований, и я готов привести пример. Простой PHP-скрипт помещается в 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
для класса из текущего пространства имен.
Если расширение включено, вам все равно необходимо использовать это:
use \ZMQContext; use \ZMQ;
(или, альтернативно, напрямую обращаться к ним с использованием ведущего «\»)
Перед использованием новых расширений вам необходимо перезапустить Apache. mod_php не добавляет модули во время выполнения
Если вы используете Wampserver, скопируйте файл libzmq.dll
в C:\wamp64\bin\apache\apache2.4.17\bin
и перезапустите wamp.