2011-06-29 8 views
7

Ok, quindi ho questo codice che permetterà all'utente di scaricare una canzoneGli spazi nel nome stanno rompendo il download?

$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'); 

Il problema è che se la canzone ha uno spazio in esso come sinsita happy 1 SONIFI.mp3 l'utente dovrà scaricare solo un file di testo denominato sinsita .. idee .Any come risolvere questo comportamento

+0

Vedi http://stackoverflow.com/questions/93551/how-to-encode-the-filename-parameter-of-content-disposition-header-in- http –

risposta

11

bisogna citare il nome del file nella disposizione dei contenuti:

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

Edit: Ora significa che anche che se il nome del file contiene una citazione; allora devi sfuggire a quella citazione. Quindi, in realtà il codice simile a questo ora:

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

funzionava alla perfezione ma in cromo non si scaricava nemmeno ... ma in safari e firefox funziona perfettamente ... qualsiasi idea – Trace

+0

@Tamer: Non penso che sia correlato a questo problema. Cosa succede se si rimuove il 'nomefile' tutti insieme? (Test del fumo per vedere se questo è il problema) – vcsjones

+0

Piccola nota: ho usato il doppio apice nell'intestazione con le virgolette singole che racchiudevano il nome del file, che non funzionava. L'utilizzo delle quotazioni dovrebbe essere la risposta sopra. – Martijn

Problemi correlati