Home >Backend Development >PHP Tutorial >php读xml巨慢(大数据量)

php读xml巨慢(大数据量)

WBOY
WBOYOriginal
2016-06-23 14:17:481107browse

我用php读取商家的商品API,xml格式的,用的函数式getxmldata()这个函数,但是由于数据太大,运行时间常常超时。有没有什么好的办法读这种大的xml?有没有一部分一部分读的方法?具体一点,剩的分都给了。先谢谢大仙们了~


回复讨论(解决方案)

读淘宝的api都没超时  你这个数据量有多大啊...

另外的确是因为数据量大到肯定要超时 那就用set_time_limit() 重新设定个超时时间呗.

读淘宝的api都没超时  你这个数据量有多大啊...

另外的确是因为数据量大到肯定要超时 那就用set_time_limit() 重新设定个超时时间呗.

现在需要把运行时间降下来,否则效率太低了,有没有提高读取效率的方法?

不知道getxmldata()这个函数是如何写的

php提供有操作 XML 的 SimpleXML、DOMDocument ,为何不用一下呢?
特别的是 XML 语法解析函数,可以以流方式分析 XML,比较适合自己书写解析程序

不知道getxmldata()这个函数是如何写的

php提供有操作 XML 的 SimpleXML、DOMDocument ,为何不用一下呢?
特别的是 XML 语法解析函数,可以以流方式分析 XML,比较适合自己书写解析程序

getxmldata函数里面用的是simpleXML,但是由于xml较大,读取时间很久。有没有这样的方法,比如大小为50M的xml文件,每次读取5M(就是每次读取很小的一部分)进内存,处理完了,再接着从xml里面再读取5M之类的方法?这样是不是能提高速度,或者有更好的办法?

嗯,SimpleXML、DOMDocument 都是一次性加载 xml 到内存
如果文件较大,可考虑使用  XML 语法解析函数
比如手册中的例子

$file = "data.xml";$depth = array();function startElement($parser, $name, $attrs){    global $depth;    for ($i = 0; $i < $depth[$parser]; $i++) {        echo "  ";    }    echo "$name\n";    $depth[$parser]++;}function endElement($parser, $name){    global $depth;    $depth[$parser]--;}$xml_parser = xml_parser_create();xml_set_element_handler($xml_parser, "startElement", "endElement");if (!($fp = fopen($file, "r"))) {    die("could not open XML input");}while ($data = fread($fp, 4096)) {    if (!xml_parse($xml_parser, $data, feof($fp))) {        die(sprintf("XML error: %s at line %d",                    xml_error_string(xml_get_error_code($xml_parser)),                    xml_get_current_line_number($xml_parser)));    }}xml_parser_free($xml_parser);

嗯,SimpleXML、DOMDocument 都是一次性加载 xml 到内存
如果文件较大,可考虑使用  XML 语法解析函数
比如手册中的例子

$file = "data.xml";$depth = array();function startElement($parser, $name, $attrs){    global $depth;    for ($i = 0; $i < $depth[$parser]; $i++) {        echo "  ";    }    echo "$name\n";    $depth[$parser]++;}function endElement($parser, $name){    global $depth;    $depth[$parser]--;}$xml_parser = xml_parser_create();xml_set_element_handler($xml_parser, "startElement", "endElement");if (!($fp = fopen($file, "r"))) {    die("could not open XML input");}while ($data = fread($fp, 4096)) {    if (!xml_parse($xml_parser, $data, feof($fp))) {        die(sprintf("XML error: %s at line %d",                    xml_error_string(xml_get_error_code($xml_parser)),                    xml_get_current_line_number($xml_parser)));    }}xml_parser_free($xml_parser);


谢谢斑竹~~

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn