CURL_RETURNTRANSFER下载大文件

时间:2016-04-14 10:25:35

标签: php curl

我使用一个功能通过私有API下载文件。 下载小/中文件的一切都很顺利,但大文件是不可能的,因为它占用了太多的内存。

这是我的功能:

jar cfe myJar.jar myClass diver.class map.class reduce.class

如何优化此功能以将文件下载到磁盘而不是内存?

由于

2 个答案:

答案 0 :(得分:1)

使用CURLOPT_FILE。它会询问保存下载的文件指针。

代码就像

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$fp = fopen("your_file", 'w+');
curl_setopt($ch, CURLOPT_FILE, $fp);

curl_exec ($ch);

答案 1 :(得分:0)

您可以使用CURLOPT_FILE,如下所示:

protected function executeFile($method, $url, $params=array(), $as_user=null) {

    $data_string = json_encode($params);
    $method = strtoupper($method);
    $fp = fopen ('savefilepath', 'w+');

    $ch = curl_init();

    if($method == 'GET') {
        $url  = $this->options['api_url'].$url.'?';
        $url .= $this->format_query($params);
        curl_setopt($ch, CURLOPT_URL, $url);
    } else {
        curl_setopt($ch, CURLOPT_URL, $this->options['api_url'].$url);
    }

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FILE, $fp); 

    ....

    curl_exec($ch);
    fclose($fp);
    .....
    return $return;
}