mongodb — запрос оболочки Mongoimport в коде php

Как выполнить запрос mongoimport / mongoexport (shell), используя код PHP? Я пытался использовать команды exec (), shell_exec (), system (), passthru (). Ни один из них не работал для выполнения такого кода запроса на программном уровне.

Мой код:

$result = exec('mongoimport --host hostname --db mycoll
--collection mycoll --type json --file /home/xxx/filename.json --jsonArray 2>&1  ',$outputArray);
print_r($outputArray);

Примечание. Проверяется на наличие ошибок, добавляя 2>&1 в команду. Получил эти ошибки:

mongoimport: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by mongoimport)
mongoimport: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by mongoimport)
mongoimport: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by mongoimport)
mongoimport: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /usr/lib/libboost_thread.so.1.46.1)
mongoimport: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /usr/lib/libboost_program_options.so.1.46.1)
mongoimport: /opt/lampp/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /usr/lib/libboost_program_options.so.1.46.1)

Тот же запрос, если он выполняется в терминале, импортирует данные json в мою коллекцию mongo. Как исправить эти проблемы с версиями, чтобы импортировать этот запрос через php-код?

0

Решение

Я только что протестировал ваш пример кода выше на Ubuntu 14, PHP 7, MongoDB v3.4(за mongoimport) и работает без проблем.

Судя по выводу, который вы разместили, похоже, что PHP выполняет mongoimport используя среду /opt/lampp/lib/libstdc++.so.6, Эта версия файла может быть слишком старой и не определяет GLIBCXX_3.4.x версия.

Тот же запрос, если он выполняется в терминале, импортирует данные json в мою коллекцию mongo.

Это, скорее всего, потому что вы используете другой libstdc++.so.6, например: /usr/lib/libstdc++.so.6 что, вероятно, соответствует критериям GLIBCXX.

Вы можете узнать, какие libstdc++ используется в оболочке, выполнив следующую команду:

/sbin/ldconfig -p | grep stdc++

Возможные решения:

  1. Удалить /opt/lampp/lib/libstdc++.so.6 и использовать свою работу libstdc++.so.6
  2. Отключите LD_LIBRARY_PATH в PHP, чтобы источники выполнения вашей системы были установлены libstdc++,
  3. Если ваша установка LAMPP устарела, удалите и переустановите для сброса / обновления libstdc++,

Альтернатива — не вызывать внешний скрипт mongoimport, Вместо этого, чтобы написать код PHP для чтения JSON файл и использование PHP-библиотека MongoDB вставлять документы. Увидеть Учебники: вставка документов.
В качестве примера вы можете выполнить чтение файла json, как показано ниже:

$data = fopen("/home/xxx/filename.json", "r");
while(($line = fgets($data)) !== false) {
$json = json_decode($line, true);
print_r($json);
//Add logic to insert document to MongoDB.
}
fclose($data);
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]