2011-06-29 12 views
7

ठीक है तो मैं इस कोड है कि एक उपयोगकर्ता एक गीतनाम में रिक्त स्थान डाउनलोड तोड़ रहा है?

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

समस्या यह है कि उपयोगकर्ता केवल sinsita नामक एक पाठ फ़ाइल डाउनलोड करेगा गीत sinsita happy 1 SONIFI.mp3 की तरह उस में एक जगह है, तो है डाउनलोड करने के लिए अनुमति देगा है .. कैसे इस व्यवहार ठीक करने के लिए .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

@ टामर: मुझे नहीं लगता कि यह इस मुद्दे से संबंधित है। यदि आप 'फ़ाइल नाम' को एक साथ हटाते हैं तो क्या होता है? (यह देखने के लिए धुआं परीक्षण है कि क्या यह मुद्दा है) – vcsjones

+0

छोटा नोट: मैंने फ़ाइल नाम को लपेटने वाले सिंगल कोट्स के साथ शीर्षलेख में डबल कोट का उपयोग किया, जो काम नहीं करता था। उद्धरण उपयोग उपरोक्त उत्तर के रूप में होना चाहिए। – Martijn

संबंधित मुद्दे