如何在不增加内存压力的情况下显示大 xml 提要 php
How to display large xml feed without putting pressure in memory php
我想显示非常大的 XML-feed,而不会对 CPU 或内存造成太大压力。因为无法再将提要放入内存,而必须以替代方式处理。
我有两个 url 到 curl 一个有限制:
http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2&limit=5000
其他不限:http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2
<?php
ini_set('memory_limit', '32M');
$feed_url = "http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2&limit=5000";
$c = curl_init($feed_url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$xmlstr = curl_exec($c);
curl_close($c);
$xml_feed_obj = json_decode(json_encode((array) simplexml_load_string($xmlstr)), 1);
foreach($xml_feed_obj as $products_feed)
{
foreach($products_feed as $feed)
{
$html = "<link href='http://localhost/task/style.css' rel='stylesheet' type='text/css' />
<div class='rightcontainer' style='margin-top:10px;'>
<div class='flexslider carousel'>
<ul class='slides'>
<li>
<img src='".$feed->imageURL."' width='80' height='80'/>
<div class='caption-info'>
<div class='caption-info-head'>
<div class='caption-info-head-left'>
<h4>Product Name: ".$feed->name."</h4><br>
<span>Price: ".$feed->price."</span>
</div>
<div class='clear'> </div>
</div>
</div>
</li>
</ul>
</div>
</div>";
ob_start();
echo $html;
$return_html = ob_get_contents() ;
}
}
echo $return_html;
?>
当我curl url时,显示和使用内存需要时间。
尝试使用极限值“50, 100”。
http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2&limit=50, 100
它将从 100 条开始记录,并限制为 50 条。因此您可以使用 ajax 调用根据您的要求显示记录。它不会一次获取所有记录。
我想显示非常大的 XML-feed,而不会对 CPU 或内存造成太大压力。因为无法再将提要放入内存,而必须以替代方式处理。
我有两个 url 到 curl 一个有限制: http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2&limit=5000
其他不限:http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2
<?php
ini_set('memory_limit', '32M');
$feed_url = "http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2&limit=5000";
$c = curl_init($feed_url);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$xmlstr = curl_exec($c);
curl_close($c);
$xml_feed_obj = json_decode(json_encode((array) simplexml_load_string($xmlstr)), 1);
foreach($xml_feed_obj as $products_feed)
{
foreach($products_feed as $feed)
{
$html = "<link href='http://localhost/task/style.css' rel='stylesheet' type='text/css' />
<div class='rightcontainer' style='margin-top:10px;'>
<div class='flexslider carousel'>
<ul class='slides'>
<li>
<img src='".$feed->imageURL."' width='80' height='80'/>
<div class='caption-info'>
<div class='caption-info-head'>
<div class='caption-info-head-left'>
<h4>Product Name: ".$feed->name."</h4><br>
<span>Price: ".$feed->price."</span>
</div>
<div class='clear'> </div>
</div>
</div>
</li>
</ul>
</div>
</div>";
ob_start();
echo $html;
$return_html = ob_get_contents() ;
}
}
echo $return_html;
?>
当我curl url时,显示和使用内存需要时间。
尝试使用极限值“50, 100”。
http://pf.tradetracker.net/?aid=1&type=xml&encoding=utf-8&fid=251713&categoryType=2&additionalType=2&limit=50, 100
它将从 100 条开始记录,并限制为 50 条。因此您可以使用 ajax 调用根据您的要求显示记录。它不会一次获取所有记录。