php 代码中的 Mongoimport shell 查询
Mongoimport shell query in php code
如何使用 PHP 代码执行 mongoimport / mongoexport (shell) 查询?我试过使用 exec()、shell_exec()、system()、passthru() 命令。 None 其中用于从程序级别执行此类查询代码。
我的代码:
$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 来检查 error_reporting。遇到这些错误:
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(for mongoimport) 上测试了你上面的代码示例,它运行没有问题。
根据您发布的输出,PHP 似乎正在使用 /opt/lampp/lib/libstdc++.so.6
的环境执行 mongoimport
。此文件版本可能太旧,未定义 GLIBCXX_3.4.x
版本。
The same query if executed in terminal imports json data to my mongo collection.
这很可能是因为您使用了不同的 libstdc++.so.6
。例如:/usr/lib/libstdc++.so.6
可能符合 GLIBCXX 标准。
您可以通过以下命令 运行 找出 shell 上正在使用哪个 libstdc++
:
/sbin/ldconfig -p | grep stdc++
可能的解决方案:
- 删除
/opt/lampp/lib/libstdc++.so.6
并使用您的工作 libstdc++.so.6
- 在 PHP 中取消设置 LD_LIBRARY_PATH,以便您的系统安装执行源
libstdc++
。
- 如果您安装的 LAMPP 是旧的,请卸载并重新安装到 reset/update
libstdc++
。
另一种方法是不调用外部脚本mongoimport
。而是编写 PHP 代码来读取 JSON
文件并使用 MongoDB PHP library to insert documents. See Tutorials: Insert Documents。
例如,您可以迭代读取 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);
如何使用 PHP 代码执行 mongoimport / mongoexport (shell) 查询?我试过使用 exec()、shell_exec()、system()、passthru() 命令。 None 其中用于从程序级别执行此类查询代码。
我的代码:
$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 来检查 error_reporting。遇到这些错误:
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(for mongoimport) 上测试了你上面的代码示例,它运行没有问题。
根据您发布的输出,PHP 似乎正在使用 /opt/lampp/lib/libstdc++.so.6
的环境执行 mongoimport
。此文件版本可能太旧,未定义 GLIBCXX_3.4.x
版本。
The same query if executed in terminal imports json data to my mongo collection.
这很可能是因为您使用了不同的 libstdc++.so.6
。例如:/usr/lib/libstdc++.so.6
可能符合 GLIBCXX 标准。
您可以通过以下命令 运行 找出 shell 上正在使用哪个 libstdc++
:
/sbin/ldconfig -p | grep stdc++
可能的解决方案:
- 删除
/opt/lampp/lib/libstdc++.so.6
并使用您的工作libstdc++.so.6
- 在 PHP 中取消设置 LD_LIBRARY_PATH,以便您的系统安装执行源
libstdc++
。 - 如果您安装的 LAMPP 是旧的,请卸载并重新安装到 reset/update
libstdc++
。
另一种方法是不调用外部脚本mongoimport
。而是编写 PHP 代码来读取 JSON
文件并使用 MongoDB PHP library to insert documents. See Tutorials: Insert Documents。
例如,您可以迭代读取 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);