3

自分のサイトから単一の.mp3ファイルをダウンロードしたいのですが、このコードを使用すると、FirefoxとSafariで.phpが強制されます。しかし、クロムでは、ファイルをインラインとして強制的に送信し、ページで再生します。どうすれば実際に.mp3ファイルをダウンロードさせることができますか?

$track = $_SERVER['QUERY_STRING'];

if (file_exists("/home/user/gets/" .$track)) {
    header("Content-Type: audio/mpeg");
    header('Content-Length: ' . filesize($track));
    header('Content-Disposition: attachment; filename="test.mp3"');
    $str = "/home/user/gets/".$track;
    readfile($str); 
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}

また、.zipファイルをダウンロードしてContent-Typeをapplication / ocetet-streamに変更しようとしましたが、すべてのブラウザーで.phpファイルが強制されます。

//$track = $_SERVER['QUERY_STRING'];
$track = 'testfile.zip';
if (file_exists("/home/user/gets/" .$track)) {
    header("Content-Type: application/octet-stream");
    header('Content-Length: ' . filesize($track));
    header('Content-Disposition: attachment; filename="test.mp3"');
    $str = "/home/user/gets/".$track;
    readfile($str); 
    exit;
} else {
    header($_SERVER['SERVER_PROTOCOL'].' 404 Not Found', true, 404);
    echo "no file";
}
4

2 に答える 2

9

ファイル名から引用符を外してみてください。

header('Content-Disposition: attachment; filename=test.mp3');
                                                  ^^^^^

使用しようとしているファイル名の代わりにスクリプトの名前を取得することは、通常、ブラウザが保存しようとしているファイルシステムに対してファイル名に無効な文字が含まれていることを示しています。たとえば"、許可されていません。

于 2012-08-16T21:20:48.783 に答える
3

filesize($track)は間違っていると思います、それは全体の道でなければなりませんfilesize("/home/user/gets/".$track)。これにより、phpがエラーメッセージを出力し、content-lengthおよびdispositionヘッダーを設定できなくなります。

于 2012-08-16T21:26:25.483 に答える