我试图从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);
答案 0 :(得分:0)
我立即注意到您的代码片段的一个问题是您通过将文件句柄分配给$ fp来打开a.xml,但是您在curl_setopt中将其引用为$ fh。
XML有多大?根据允许php使用的内存量,您可以使用以下内容获取文件的全部内容:
$xmlString = file_get_contents('a.xml');
或者如果您计划进一步处理xml,可以将文件加载到SimpleXMLElement:
$xml = simplexml_load_file('a.xml');
$xmlDom = new DOMDocument();
$xmlDom->load('a.xml');