7

Curl でファイルをダウンロードしたいと思います。問題は、ダウンロード リンクが直接的でないことです。たとえば、次のようになります。

http://localhost/download.php?id=13456

curl でファイルをダウンロードしようとすると、download.php というファイルがダウンロードされます。

ここに私のカールコードがあります:

        ###
        function DownloadTorrent($a) {
                    $save_to = $this->torrentfolder; // Set torrent folder for download
                    $filename = str_replace('.torrent', '.stf', basename($a));

                    $fp = fopen ($this->torrentfolder.strtolower($filename), 'w+');//This is the file where we save the information
                    $ch = curl_init($a);//Here is the file we are downloading
                    curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // Important 
                    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
                    curl_setopt($ch, CURLOPT_URL, $fp);
                    curl_setopt($ch, CURLOPT_HEADER,0); // None header
                    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); // Binary trasfer 1
                    curl_exec($ch);
                    curl_close($ch);
                    fclose($fp); 
    }

パスを知らずにファイルをダウンロードする方法はありますか?

4

3 に答える 3

4

CURLOPT_FOLLOWLOCATION を試すことができます

サーバーが HTTP ヘッダーの一部として送信する "Location: " ヘッダーに従う場合は TRUE (これは再帰的であることに注意してください。CURLOPT_MAXREDIRS が設定されていない限り、PHP は送信される "Location: " ヘッダーと同じ数に従います)。

したがって、次のようになります。

function DownloadTorrent($a) {
    $save_to = $this->torrentfolder; // Set torrent folder for download
    $filename = str_replace('.torrent', '.stf', basename($a));

    $fp = fopen ($this->torrentfolder.strtolower($filename), 'w+');//This is the file where we save the information
    $ch = curl_init($a);//Here is the file we are downloading
    curl_setopt($ch, CURLOPT_ENCODING, "gzip"); // Important 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 50);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_HEADER,0); // None header
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); // Binary transfer 1
    curl_exec($ch);
    curl_close($ch);
    fclose($fp); 
}
于 2012-07-06T22:02:33.437 に答える
2

FOLLOWLOCATION オプションを true に設定します。例:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

オプションはここに文書化されています: http://www.php.net/manual/en/function.curl-setopt.php

于 2012-07-06T22:04:55.167 に答える
1

うおお!

CURLOPT_FOLLOWLOCATIONは完璧に機能します...

問題は、fopen() にCURLOPT_URLを使用していることです。単純にCURLOPT_URL を CURLOPT_FILEに変更します。

そしてそれは非常にうまく機能します!助けてくれてありがとう =)

于 2012-07-06T22:53:54.650 に答える