我正在尝试从rss feed XML获取文件,更改它们的名称并将它们本地存储在Window 8计算机上。它在OS X上的MAMP中运行完美,但是当我在WAMP中运行相同的代码时,文件是0字节,只有文件名来自fopen()命令。
$content = $domain . $feed;
$file = file_get_contents($content);
$xml = simplexml_load_string($file);
for ($x = 0; $x < $max; $x++) {
$link = $xml->channel->item[$x]->link;
$i = explode("/", $link);
set_time_limit(0);
$fileName = 'videos/video-' . $i[7] .'.mp4';
if (!file_exists($fileName)){
$fp = fopen($fileName, 'w+');
$url = $link;
$ch = curl_init(str_replace(" ","%20",$url));
curl_setopt($ch, CURLOPT_TIMEOUT, 50);
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$data = curl_exec($ch);
curl_close($ch);
}
};
echo $file;
这是在AJAX调用的.php文件中,它意味着下载视频,然后echo $文件创建一个由JS进一步解析的XML文件。如果连接断开,那么文件就是本地不在互联网上。这适用于MAMP中的OS X.它在Windows和AMP上不起作用,它与cURL命令和目录购买有关,我不知道cURL无论如何都能够排除故障。
答案 0 :(得分:0)
尝试添加下一个卷曲选项:
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 0);
还尝试将行$ch = curl_init(str_replace(" ","%20",$url));
更改为$ch = curl_init(urlencode($url));
答案 1 :(得分:0)
添加下一个用于将下载结果写入文件的选项:
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
答案 2 :(得分:0)
现在有两件事我似乎失踪了。
fclose($fp);
我还需要关闭fopen()。
{{1}}
文件在自签名证书上,显然cURL不喜欢这样。