Intereting Posts
Как заполнить пустое значение, если в этот день нет записи с использованием группы MySQL Масштабирование приложения чата – короткий опрос и длительный опрос (AJAX, PHP) Инверсия контейнера управления для PHP? Удалите <script> и другие теги с помощью php Лучший способ шифрования информации о клиентах в базе данных MySQL моей компании? $ facebook-> getSession () возвращает null в примере кода. это нормально? что еще я могу сделать, чтобы не допустить инъекции XSS и SQL Injection? Заявления PDO, не работающие на живом хосте Проводка массива на PHP с использованием ajax Конфигурация phpMyAdmin Как преобразовать массив в строки, разделенные запятой, в шаблоне smarty? исправление cakephp .htaccess / mod_rewrite для настроек общего хостинга Помогите! PHP, пытающийся передать FTPS, создает пустые файлы Удаление всех десятичных знаков в PHP Нечетный эффект прозрачности при слиянии двух .png с прозрачностью в PHP-GD

mongo.so:> undefined symbol: php_json_encode в Unknown on line 0. После установки mongo драйвер для php

После установки Mongo 2.6.0 которая была успешной, я попытался обновить драйвер php mongo на ubuntu 12.04 с помощью следующей команды: sudo pecl upgrade mongo . Это началось с:

 downloading mongo-1.5.1.tgz ... Starting to download mongo-1.5.1.tgz (188,885 bytes) .........................................done: 188,885 bytes 117 source files, building running: phpize Configuring for: PHP Api Version: 20121113 Zend Module Api No: 20121212 Zend Extension Api No: 220121212 Build with Cyrus SASL (MongoDB Enterprise Authentication) support? [no]: 

Где я выбрал No потому что, когда я пробовал да, он терпел неудачу с ошибкой. Без меня я смог установить его успешно, и окончательное сообщение выглядело так:

 Build process completed successfully Installing '/usr/lib/php5/20121212/mongo.so' install ok: channel://pecl.php.net/mongo-1.5.1 configuration option "php_ini" is not set to php.ini location You should add "extension=mongo.so" to php.ini 

После этого я перезапустил apache ( 2.4.9 ), но мой phpinfo() сказал мне, что монго не установлено. С другой стороны, я могу ясно видеть extension=mongo.so в моем php.ini.

Я проверил свой error.log, и я вижу следующую строку:

PHP Предупреждение: запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib/php5/20121212/mongo.so' – /usr/lib/php5/20121212/mongo.so: undefined symbol: php_json_encode в Unknown on line 0

Я проверил /usr/lib/php5/20121212/ и увидел, что на самом деле есть файл mongo.so . Я искал его, и единственное, что я смог найти, это то , что не имеет особого значения, но без каких-либо других вариантов я все еще пробовал шаги там без успеха.

У кого-нибудь есть идея, как это исправить?

Проблема mongo.so с порядком загрузки, поэтому расширение json нужно загрузить до загрузки mongo.so .

Поскольку другие могут столкнуться с этим, я опишу весь процесс:

  • В каталоге /etc/php/mods-available (или в зависимости от платформы) создайте отдельный mongo.ini со следующим:
 ; configuration for php mongo module ; priority=30 extension=mongo.so 
  • Удалите любые другие ссылки на mongo.so из других файлов, таких как php.ini

  • Создавайте символические ссылки в каждой директории cli и apache2 как это требуется для использования:

sudo ln -s ../../mods-available/mongo.ini 30-mongo.ini

В конце этого вы должны иметь структуру, которая выглядит так:

 $/etc/php5$ tree . ├── apache2 │  ├── conf.d │  │  ├── 05-opcache.ini -> ../../mods-available/opcache.ini │  │  ├── 10-pdo.ini -> ../../mods-available/pdo.ini │  │  ├── 20-json.ini -> ../../mods-available/json.ini │  │  ├── 20-readline.ini -> ../../mods-available/readline.ini │  │  └── 30-mongo.ini -> ../../mods-available/mongo.ini │  └── php.ini ├── cli │  ├── conf.d │  │  ├── 05-opcache.ini -> ../../mods-available/opcache.ini │  │  ├── 10-pdo.ini -> ../../mods-available/pdo.ini │  │  ├── 20-json.ini -> ../../mods-available/json.ini │  │  ├── 20-readline.ini -> ../../mods-available/readline.ini │  │  └── 30-mongo.ini -> ../../mods-available/mongo.ini │  └── php.ini └── mods-available ├── json.ini ├── mongo.ini ├── opcache.ini ├── pdo.ini └── readline.ini 

Это гарантирует, что расширение «json» будет загружаться динамическим загрузчиком перед модулем «mongo».

Но в основном удалите mongo.so из «php.ini» и поместите его в собственный файл с более высоким порядком загрузки, чем расширение json. Тогда это сработает.

Это, возможно, нуждается в JIRA, поскольку я считаю, что это произошло раньше.

UPDATE : На самом деле это открытый JIRA PHP-1052

моя система – centos 6.3. Я решил проблему.

 vim /etc/php.ini 

затем добавьте

 extension=json.so 

до

 extension=mongo.so 

наконец, перезапустите php-fpm и nginx (apache)

 service php-fpm restart service ngxin restart 

Все нормально!

Для тех, кто ищет быстрое решение, вот мои несколько строк, в которых долгое объяснение Нейла Лунна о проблеме.

 sudo -i cd /etc/php5/mods-available/ nano mongo.ini 

Затем вставьте это:

 ; configuration for php mongo module ; priority=30 extension=mongo.so 

Выйдите из редактора.

 cd ../cli/conf.d sudo ln -s ../../mods-available/mongo.ini 30-mongo.ini cd ../../apache2/conf.d sudo ln -s ../../mods-available/mongo.ini 30-mongo.ini 

Перезапустите apache.

 service apache2 restart 

Все должно работать.

Вам нужно загрузить расширение json перед расширением mongo.

Не указывайте ссылки на оба модуля в php.ini,

Создайте файл mongo.ini внутри / etc / php5 / mods-enable со следующим содержимым:

 priority=30 extension=mongo.so 

и json.ini

 priority=20 extension=json.so 

Для CentOS вам просто нужно добавить mongo.ini в каталог php-модуля, в моем случае:

 "/etc/php.d/" 

Для Ubuntu 14.04 вы также можете добавить символическую ссылку «30-mongo.ini»:

 /etc/php5/cgi/conf.d /etc/php5/fmp/conf.d