Как выполнить запрос 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-код?
Я только что протестировал ваш пример кода выше на 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++
Возможные решения:
/opt/lampp/lib/libstdc++.so.6
и использовать свою работу libstdc++.so.6
libstdc++
,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);
Других решений пока нет …