php读xml巨慢(大数据量) 我用php读取商家的商品API,xml格式的,用的函数式getxmldata()这个函数,但是由于数据太大,运行时间常常超时。有没有什么好的办法读这种大的xml?有没有一部分一部分读的方法?具体一点,剩的分都给了。先谢谢大仙们了~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 读淘宝的api都没超时 你这个数据量有多大啊...另外的确是因为数据量大到肯定要超时 那就用set_time_limit() 重新设定个超时时间呗. 不知道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); PHP怎么让mysql数据表自动归类? 字符串转二维数组问题 首页中添加了updateentry.php链接,但是跳转之后又回到首页? PHP网站被人插入大量数据,有什么对策吗 UTF8编码时 莫名其妙的出现一个隐形字符 PHP SQL查询有停顿现象 Apache和php配置 求助 php 技术群 提个问题,希望得到大家的帮助。尤其希望老大指点指点,感激不尽 求好的分页程序? 有用ezSQL的朋友吗?错误抓取问题 php设置伪静态规则编写 问题
特别的是 XML 语法解析函数,可以以流方式分析 XML,比较适合自己书写解析程序
getxmldata函数里面用的是simpleXML,但是由于xml较大,读取时间很久。有没有这样的方法,比如大小为50M的xml文件,每次读取5M(就是每次读取很小的一部分)进内存,处理完了,再接着从xml里面再读取5M之类的方法?这样是不是能提高速度,或者有更好的办法?
如果文件较大,可考虑使用 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);