Прежде всего, я проверил все связанные вопросы, но в моем случае это должно быть что-то еще (я пробовал решения оттуда);
Я установил zeromq, следуя этим инструкциям http://zeromq.org/bindings:php и все работает отлично, когда я запускаю свой PHP-скрипт из CLI
Проблема запускается с сервера Apache, я получаю
Fatal error: Class 'ZMQContext' not found in /var/www/i.php on line 19
строка 19
$context = new ZMQContext();
Что я пробовал:
1) Я запустил php_info () и узнал, где находятся мои файлы php.ini.
/etc/php5/apache2/php.ini
/etc/php5/apache2/conf.d/10-php_pdo_mysql.ini,
/etc/php5/apache2/conf.d/10-zmq.ini,
and so on...
Поэтому я открыл эти файлы и добавил строку «extension = zmq.so»
Не помогло.
2) Я добавил следующие строки в начало моего скрипта:
use \ZMQContext;
use \ZMQ;
Опять не помогло
3) Я проверил журналы ошибок Apache и нашел это:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626
/zmq.so' - /usr/lib/php5/20090626/zmq.so:
cannot open shared object file: No such file or directory in Unknown on line 0
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib/php5/20090626
/zmq.so' - /usr/lib/php5/20090626/zmq.so: cannot open shared object file: No such
file or directory in Unknown on line 0
4) Итак, я проверил, где на моей машине находится файл zmq.so:
user@wb:~$ sudo find / -name zmq.so
/home/user/php-zmq/modules/zmq.so
/home/user/php-zmq/.libs/zmq.so
/var/www/push/php-zmq/modules/zmq.so
/var/www/push/php-zmq/.libs/zmq.so
/usr/lib/php5/20100525/zmq.so
/usr/local/lib/php/extensions/no-debug-non-zts-20121212/zmq.so
Так есть ли у вас какие-либо предположения, что еще может быть не так? Спасибо
Я должен сделать несколько предположений, но давайте попробуем:
Похоже, у вас установлены разные версии PHP или вы обновили / понизили версию PHP.
У вас есть папка /usr/lib/php5/20100525/
в вашей системе, которая принадлежит PHP 5.4 на машине типа Debian (я думаю). Но ваш PHP ищет файл в /usr/lib/php5/20090626/
, который я думаю, принадлежит PHP 5.3.
Ваш PHP CLI, кажется, работает с PHP 5.4, в то время как mod_php
вашего Apache, кажется, для запуска 5.3.
Если это правда, вы можете попробовать скопировать zmq.so
в /usr/lib/php5/20090626/zmq.so/
и перезапустите Apache. Но он может потерпеть неудачу из-за двоичной несовместимости, если он построен на PHP 5.4.
В этом случае я бы рекомендовал обновить ваш mod_php
в PHP 5.4 (снова?).
Так что я наконец-то решил (спасибо lxg за то, что указал мне правильное направление)
Прежде всего, я должен вручную удалить мои скомпилированные версии apache и php (следуя некоторым урокам здесь, на SO)
затем удаление php и apache с помощью apt-get
переустановка php и apache с помощью apt-get
переустановка zmq (скомпилировать и сделать привязки php)
У меня нет последних php и apache, но по крайней мере модуль загружается как в Apache, так и в php CLI