这里完全缺乏合适的解决方案让我发疯。
客户给了我一个14MB大小的XML文件,在将来的请求中可能会更大。我需要一个可以定期将其数据加载到MySQL表中的脚本。服务器正在运行MySQL 5.0.96,所以我不相信LOAD XML命令可供我使用。
我尝试使用PHP DOM lib来解析XML文件,但Apache返回500内部服务器错误。我认为这是一个内存不足,因为我可以注释掉加载XML文件的PHP代码,脚本运行顺畅(没有数据)。服务器上的内存限制已经是128MB。
我也尝试过XMLReader,它似乎做了同样的事情。有什么建议吗?
答案 0 :(得分:0)
XMLReader用作迭代器,因此您必须根据xml文档的单个标记实现分组/提取逻辑。假设xml文件中有一个像<row>
这样的元素对应于单个插入,它可能看起来像这样:
$reader = new XMLReader();
$reader->open('/path/to/the/file.xml');
while ($reader->read()) {
if ($reader->name == "row" && $reader->nodeType == XMLReader::ELEMENT) {
// the cursor currently at <row> element
// hopefully one fragment will fit into memory and you can use simplexml for easy access
// alternatively try $reader->expand() for DOMNode of the same thing
$rowxml = simplexml_load_string('<'.'?xml version='1.0'?'.'>'.$reader->readOuterXML());
// build insert from the $rowxml object, run the query
}
}
$reader->close();