2011-06-29 12 views
7

[OK]をので、私はこの問題は、曲がsinsita happy 1 SONIFI.mp3のようにスペースが含まれている場合は、ユーザーにのみsinsitaという名前のテキストファイルをダウンロードすることで、曲名前のスペースがダウンロードを中断していますか?

$file = DIR_DOWNLOAD . $download_info->row['filename']; 
$mask = basename($download_info->row['mask']); 
$mime = 'application/octet-stream'; 
$encoding = 'binary'; 

if (!headers_sent()) { 
if (file_exists($file)) { 
    header('Pragma: public'); 
    header('Expires: 0'); 
    header('Content-Description: File Transfer'); 
    header('Content-Type: ' . $mime); 
    header('Content-Transfer-Encoding: ' . $encoding); 
    header('Content-Disposition: attachment; filename=' . ($mask ? $mask : basename($file))); 
    header('Content-Length: ' . filesize($file)); 
    $file = readfile($file, 'rb'); 

をダウンロードするユーザーをできるようになります。このコードを持っています..この動作を修正する方法.ANYアイデア

+0

はhttp://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in-を参照してください。 http –

答えて

11

あなたはコンテンツ処分にファイル名を引用する必要があります。

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

編集:今でも、ファイル名は引用符が含まれている場合ことを意味します。あなたはその引用を逃れなければなりません。だから、本当にあなたのコードは次のようになります。

header('Content-Disposition: attachment; filename="' . str_replace('"', '\\"', ($mask ? $mask : basename($file))) . '"'); 
+0

これは素晴らしかったが、クロムでもダウンロードされていない...しかし、サファリやファイアフォックスでは、その完璧な作業...任意のアイデア – Trace

+0

@ Tamer:私はそれがこの問題に関連しているとは思わない。 'filename'を一括して削除するとどうなりますか? (それが問題であるかどうかを調べるための煙のテスト) – vcsjones

+0

小さなメモ:ヘッダーに二重引用符を使用して、ファイル名をラップする一重引用符を使用しましたが、それは機能しませんでした。見積もりの​​使用法は上記の答えと同じでなければなりません。 – Martijn

関連する問題