2016-05-29 23 views
1

私はここで少し助けが必要です。私はいくつかのmp3をホストするサイトを持っています。ユーザーがダウンロードURLをクリックすると、downloadmp3.phpというファイルに直接リンクします。これはurlの2つのパラメータになります。phpファイルは以下に含まれており、基本的にmp3を保存することをユーザーに強制します。 (ブラウザなどで再生しないでください)。PHP - MP3ファイルのダウンロードを強制する

これは起こりません。代わりに、ファイルがASCII形式でブラウザに書き込まれているようです。それは書かれた実際のmp3ファイルのようだ。

ここに私のdownloadmp3.phpファイルです...どうぞ、このコードで何が間違っていますか。 ローカルのLAMP(WindowsのBitnami Wampstack)で動作します。つまり、私のローカルテスト環境では、ファイルを自分のbroswerに送信して保存できます。実際のサーバーにアップロードすると、基本的にmp3ファイルが書き出されます。いいえ、他のオーディオやファイル形式 - ここ

がちなみに

<?php 
include 'ngp.php'; 
$file = $_GET['songurl']; 
$songid = $_GET['songid']; 
increasedownloadcount($songid); 
if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: audio/mpeg'); 
    header('Content-Disposition: attachment; filename=' . basename($file)); 
    header('Content-Transfer-Encoding: binary'); 
    header('Expires: 0'); 
    header('Pragma: public'); 
    header('Content-Length: ' . filesize($file)); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
} 
?> 

を助けてください... downloadmp3.php、犯人ファイルで、このサイトでは、唯一のMP3ファイルをホストします。したがって、このdownloadmp3.phpスクリプトは、このファイルをどこに保存するかをユーザに尋ねるのが理想的です。

ご協力いただきありがとうございます。

+0

は、あなたがこれらの異なる結果を得ているいくつかの使用である(ローカルホストから強制的にダウンロードして、サーバから書き出さ):

if(isset($_GET['file'])){ $file = $_GET['file']; header('Content-type: audio/mpeg'); header('Content-Disposition: attachment; filename=".$file.'"'); readfile('path/to/your/'.$file); exit(); } 

あなたはAJAX呼び出しでアクセスすることができ、またはこれは、同じブラウザで?異なるブラウザの場合は、それらは何ですか? – PetrHejda

+0

私はChromeとFirefoxの両方で働いており、両方とも同じ読み込み用のmp3ファイルを吐き出しています。それは私のローカルマシン上のファイルを私に与えることを覚えています。それは、実際のウェブホストから、それがアスキースープを与えるものです。 – Hideyoshi

答えて

0

私はfilenameは引用符で囲む必要があると思う:

header('Content-Disposition: attachment; filename="' . basename($file) . '"'); 
+0

いいえ、それは動作しませんでした。 – Hideyoshi

0

変更text/plainにするために、コンテンツ・タイプの値。このブラウザではそれを認識せず、ファイルを再生しません。代わりに、クライアントマシンでファイルをダウンロードします。

+0

提案に感謝します。しかし、それは動作しませんでした。 – Hideyoshi

+0

実際にそのファイルの存在チェックのためにurlを使用していますか、それともファイルシステムのパスですか。 content-typeをtext/plainに変更し、mp3ファイルのパスをファイルシステムのパスに使用すると、うまくいきました。ファイルシステムを相対パスに渡すだけで、コードを修正せずに試しました。 – Aditya

+0

ファイルを見つけることは問題だと思いません。コードはローカルサーバーで正常に動作します。実際のWebホストでは、ファイルを見つけても、それはmp3ファイルとして返されませんが、 'テキスト形式のmp3ファイルを出力しました'ようです。 – Hideyoshi

0

ヘッダーが多すぎます。私は彼らが何かをすると確信しています...しかし、このコードが動作します。

このコードはMP3ファイルと連動しています。ファイルへのダウンロード。問題なく再生します。
<a id="dl_link" href="download.php?file=<>file-you-wish-to-download<>" target="_blank">Download this file</a>
うまくいけば、これは

関連する問題