试图通过api.php获取一个大的xml文件

时间:2015-06-07 13:54:33

标签: php xml

我试图从api获取大型xml文件的内容。我的问题是它需要永远响应实际我等了一个小时但仍然没有。即使我尝试将url添加到我的浏览器中它也只是超时。有更好的方法来获取文件吗?

这是我的代码

$fp = fopen('a.xml','wb');
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_exec($ch);
curl_close($ch);
fclose($fp);

更新: 我使用了这个代码,但它一直在加载它认为它的一些内存问题,它试图加载整个文件,然后发送到simplexml.If我把RETURNTRANSFER设置为false它会降低内存使用量?

$options = array(
    CURLOPT_RETURNTRANSFER => true,     // return web page
    CURLOPT_HEADER         => false,    // don't return headers
    CURLOPT_FOLLOWLOCATION => true,     // follow redirects
    CURLOPT_ENCODING       => "",       // handle all encodings
    CURLOPT_USERAGENT      => "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0", // something like Firefox 
    CURLOPT_AUTOREFERER    => true,     // set referer on redirect
    CURLOPT_CONNECTTIMEOUT => 0,      // timeout on connect
    CURLOPT_TIMEOUT        => 0,      // timeout on response
    CURLOPT_MAXREDIRS      => 10,       // stop after 10 redirects
);
$curl = curl_init('someurl.com');
curl_setopt_array( $curl, $options );   
$content = curl_exec($curl);
curl_close($curl);

1 个答案:

答案 0 :(得分:0)

我立即注意到您的代码片段的一个问题是您通过将文件句柄分配给$ fp来打开a.xml,但是您在curl_setopt中将其引用为$ fh。

XML有多大?根据允许php使用的内存量,您可以使用以下内容获取文件的全部内容:

$xmlString = file_get_contents('a.xml');

或者如果您计划进一步处理xml,可以将文件加载到SimpleXMLElement

$xml = simplexml_load_file('a.xml');

DOMDocument

$xmlDom = new DOMDocument();
$xmlDom->load('a.xml');