Php 无法使用XmlStreamer读取大文件
我使用Php 无法使用XmlStreamer读取大文件,php,xml,Php,Xml,我使用xmlStreamer读取xml,但无法读取整个xml。这个函数只返回两行吗?如何获取xml的全部数据 <?php class SimpleXmlStreamer extends XmlStreamer { public function processNode($xmlString, $elementName, $nodeIndex) { $xml = simplexml_load_string($xmlString); $somet
xmlStreamer
读取xml,但无法读取整个xml。这个函数只返回两行吗?如何获取xml的全部数据
<?php
class SimpleXmlStreamer extends XmlStreamer
{
public function processNode($xmlString, $elementName, $nodeIndex)
{
$xml = simplexml_load_string($xmlString);
$something = (string)$xml->Something->SomethingElse->ReadThis;
echo "$nodeIndex: Extracted string '$something' from parent node '$elementName'\n";
return true;
}
}
$streamer = new SimpleXmlStreamer("myLargeXmlFile.xml");
if ($streamer->parse()) {
echo "Finished successfully";
} else {
echo "Couldn't find root node";
}
?>
这可能是因为您试图使用比php中定义的内存更多的内存。
尝试仅在此特定代码中扩展php内存使用
但是,首先在一个小xml上尝试您的代码,并检查您的代码是否实际工作。只有内存问题。我已经使用XMLReader类读取xml数据并轻松获取数据 解析远程XML时出现问题。您可能会收到以下警告:
“警告:filesize()[function.filesize]:第32行上路径\XmlStreamer.php中的您的文件.xml的stat失败。”。如果是这种情况,您可以在XmlStreamer.php的第32行替换以下行:
$this->totalBytes = filesize($mixed);
使用这两行代码:
$head = array_change_key_case(get_headers($mixed, TRUE));
$this->totalBytes = $head['content-length'][1];
获取远程文件大小的解决方案如下:
在此之后,根据文件大小,您可能会遇到内存限制问题,但您可能会没事
注意:我不确定为什么要将$head['content-length'][1]
乘以字节。否则将不分析完整文件。也许其他人可以澄清这一点。我也尝试过使用小xml,但在到达echo后仅获取一行成功完成。如果增加内存,我可以读取更多行。我已经增加到1GB,能够读取15行。请让我知道是否有任何增加内存大小的解决方案。