PHP cURL并非在Windows 8上保存视频

时间:2016-01-09 23:08:01

标签: php curl

我正在尝试从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无论如何都能够排除故障。

3 个答案:

答案 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不喜欢这样。