【发布时间】:2016-01-11 15:09:34
【问题描述】:
所以我有一些代码可以从第 3 方 URL 获取 XML 文件并将其存储在本地。
function get_file($file, $local_path, $newfilename) {
echo "<br>Attempting message download for $file<br>";
$out = fopen($local_path.$newfilename,"wb");
if ($out == FALSE){
print "File not opened<br>";
exit;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_FILE, $out);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_URL, $file);
curl_exec($ch);
echo "<br>Error is : ".curl_error ( $ch);
curl_close($ch);
}
get_file('URL FOR FILE', '../xml/', 'jobs.xml');
这很好用 - 我可以下载 XML 文件并在我的 xml 文件夹中查看它 - 大约 350mb。
然后我尝试像这样将它加载到我的数据库中:
$mysqli = new mysqli(CONNECTION DETAILS);
$sql = "LOAD XML LOCAL INFILE '../xml/jobs.xml' REPLACE INTO TABLE jobs ROWS IDENTIFIED BY '<job>'";
// check connection
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
// Run the query
$mysqli->query($sql);
// Close the connection
$mysqli->close();
这部分不起作用... 问题是,它适用于较小的 XML 测试文件。
LOAD XML 是否应该能够处理 350mb 的 XML?如果是这样,为什么这段代码不起作用?
如果 350mb 太大,我该怎么做才能将 xml 数据放入我的数据库(在列等中)。 XML 文件有大约 130,000 个条目。
【问题讨论】:
-
您收到的具体错误是什么?可能不是大小。您应该使用try/catch 来捕获异常。过去,我发现如果有空节点,
LOAD XML不起作用。此外,您必须遵守特定的MySQL XML structure,因此并非所有原始内容都可以工作。请张贴xml sn-p。 -
您也可以尝试在命令行上执行此操作,这将减少命令,因此不易出错。例如。您使用 PHP,您可能会遇到 PHP 超时 - 与您想要执行的实际数据操作完全无关。