1

ブラウザからアクセスできるphpスクリプトが必要で、そのスクリプトはファイルをリモートサーバー(コンピューターではなく)にダウンロードします。これは、ブラウザーから localhost/download.php として呼び出す完全なコードですが、機能しません (ネットワーク マネージャーでは、何かがダウンロードされていることがわかりますが、プロジェクト フォルダーでは見つかりません)。

<?  
    function download($url, $referer, $name)
    {
        $path = $name.'.mp3';
        $fp = fopen($path, 'w');
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_FILE, $fp);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                    'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.5) Gecko/20100101 Firefox/13.4.9\r\n',
                    "Referer: $referer" 
        ));
        $data = curl_exec($ch);
        curl_close($ch);
        fwrite($fp, $data);
        fclose($fp);
    }

    echo 'Please wait it is downloading...<br/>';
    /*$url = $_GET['url'];
    $referer = $_GET['referer'];
    $name = $_GET['name'];*/
    $url = "http://stream.get-tune.net/file/91259796/101538464/3652118538/ee58ddeb905ffa12/Palwan_Halmyradow_-_Sensiz_(get-tune.net).mp3";
    $referer = "http://get-tune.net/?a=music&q=palwan+halmyradow";
    $name = "Palwan Halmyradow - Sensiz";
    download($url, $referer, $name);
?>

ただし、コマンドラインから以下のコマンドを呼び出すと機能します。

php /var/www/idym/download.php

何が問題ですか?

4

1 に答える 1

0
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

この違いは、cli php と apache php の構成が異なるためである可能性があります。

http://php.net/manual/en/function.curl-setopt.php

完全なコード:

function download($url, $referer, $name)
{
    $path = $name.'.mp3';
    $fp = fopen($path, 'w');
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_FILE, $fp);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
                'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:13.5) Gecko/20100101 Firefox/13.4.9\r\n',
                "Referer: $referer" 
    ));
    $data = curl_exec($ch);
    curl_close($ch);
    fwrite($fp, $data);
    fclose($fp);
}
于 2013-01-12T11:57:07.820 に答える