我正在尝试保存xml文件的本地副本,然后使用简单的xml打开它,但是我收到了一些错误..这是我的代码:
$feedURL = "https://gdata.youtube.com/feeds/api/users/manitobachildhealth/favorites";
//$xml = file_get_contents("$feedURL");
$xml = file_get_contents($feedURL);
file_put_contents("video.xml", $xml);
// read feed into SimpleXML object
//$sxml = simplexml_load_file($feedURL);
$sxml = simplexml_load_file('video.xml');
我得到的错误如下:
Warning: file_get_contents(https://gdata.youtube.com/feeds/api/users/manitobachildhealth/favorites) [function.file-get-contents]: failed to open stream: Result too large in D:\wamp\www\videos2.php on line 48
我不确定为什么结果太大,它只返回6kb的xml。我做错了什么?
更新 这是在使用WAMP服务器的Windows平台上运行 - 不理想,但我坚持使用它。
更新2: 我已经尝试使用curl和fwrite来实现类似的结果,如下所示,但它不会将xml文件写入本地服务器。但它并没有给我任何错误。
更新3: 这显然是托管环境的一个非常具体的问题,但我不知道从哪里开始寻找问题。使用curl在基于linux的开发服务器上运行良好,但在这个基于Windows的生产服务器上引起了问题。非常感谢您解决此问题的额外帮助!
答案 0 :(得分:2)
您可能遇到与此问题相同的问题:CURL and HTTPS, "Cannot resolve host"(DNS-Issue)
其他详细信息:
您可以使用SimpleXML加载和保存xml数据
$xml = new SimpleXMLElement('https://gdata.youtube.com/feeds/api/users/manitobachildhealth/favorites', NULL, TRUE);
$xml->asXML('video.xml');
我在WAMP服务器上测试了上面的代码,它运行正常。
<强>更新强> 如果上面返回错误消息“[simplexmlelement .-- construct]:I / O警告:无法加载外部实体....”您的服务器可能不允许包含外部数据或php文件/脚本不有权利。
请尝试以下方法:
1.回显xml文件的内容。
$xml = new SimpleXMLElement('https://gdata.youtube.com/feeds/api/users/manitobachildhealth/favorites', NULL, TRUE);
echo htmlentities($xml->asXML());
如果您设法检索xml内容并将其打印到浏览器,那么您的服务器允许包含外部内容,并且很可能是文件权限问题。确保文件/脚本有权创建xml文件。
如果仍然无法使用cURL。
function getPageContent($options)
{
$default = array(
'agent' => $_SERVER['HTTP_USER_AGENT'],
'url' => '',
'referer' => 'http://'.$_SERVER['HTTP_HOST'],
'header' => 0,
'timeout' => 5,
'user' => '',
'proxy' => '',
);
$options = array_merge($default, $options);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $options['url']);
curl_setopt($ch, CURLOPT_HEADER, $options['header']);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($options['proxy'] != '') {
curl_setopt($ch, CURLOPT_PROXY, $options['proxy']);
}
curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 0);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $options['timeout']);
curl_setopt($ch, CURLOPT_REFERER, $options['referer']);
curl_setopt($ch, CURLOPT_USERAGENT, $options['agent']);
if ($options['user'] != '') {
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $options['user']);
}
$result = array();
$result['content'] = curl_exec($ch);
$result['info'] = curl_getinfo($ch);
$result['error'] = curl_error($ch);
curl_close($ch);
return $result;
}
$result = getPageContent(array(
'proxy' => '[ip or address]:[port]', // if needed
'user' => '[username]:[password]', // if needed
'url' => 'http://gdata.youtube.com/feeds/api/users/manitobachildhealth/favorites'
));
if (empty($result['error'])) {
// ok
// content of xml file
echo htmlentities($result['content']);
// file
$filename = 'video.xml';
// Open File
if (!$fp = fopen($filename, 'wt')) {
die("Unable to open '$filename'\n\n");
}
// write content to file
fwrite($fp, $result['content']);
// close file
fclose($fp);
} else {
// failed
echo '<pre>';
echo 'Error details;';
print_r ($result['error']);
echo '<hr />Other info:';
print_r ($result['info']);
echo '</pre>';
}
答案 1 :(得分:1)
您是否尝试过使用curl和fwrite获取内容并将其写入本地文件?
$ch = curl_init("https://gdata.youtube.com/feeds/api/users/manitobachildhealth/favorites");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
fwrite("video.xml",$output);