PHP के साथ फ़ाइल डाउनलोड को कैसे मजबूर करें


Answers

header("Content-Type: application/octet-stream");
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"file.exe\""); 
echo readfile($url);

सही है

या exe प्रकार की फाइलों के लिए बेहतर एक

header("Location: $url");
Question

मैं PHP पर वेब पेज पर जाने वाले उपयोगकर्ता पर फ़ाइल डाउनलोड करने की आवश्यकता चाहता हूं। मुझे लगता है कि इसमें file_get_contents साथ कुछ करना है, लेकिन मुझे यकीन नहीं है कि इसे कैसे निष्पादित किया जाए।

$url = "http://example.com/go.exe";

header(location) साथ फ़ाइल डाउनलोड करने के बाद यह किसी अन्य पृष्ठ पर रीडायरेक्ट नहीं कर रहा है। यह बस बंद हो जाता है।




यदि आपको अनुमति वाली स्मृति सीमा ( memory_limit ini सेटिंग) से बड़े आकार के साथ फ़ाइल डाउनलोड करना है, जो PHP Fatal error: Allowed memory size of 5242880 bytes exhausted कारण बनता है PHP Fatal error: Allowed memory size of 5242880 bytes exhausted है, तो आप यह कर सकते हैं:

// File to download.
$file = '/path/to/file';

// Maximum size of chunks (in bytes).
$maxRead = 1 * 1024 * 1024; // 1MB

// Give a nice name to your download.
$fileName = 'download_file.txt';

// Open a file in read mode.
$fh = fopen($file, 'r');

// These headers will force download on browser,
// and set the custom file name for the download, respectively.
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $fileName . '"');

// Run this until we have read the whole file.
// feof (eof means "end of file") returns `true` when the handler
// has reached the end of file.
while (!feof($fh)) {
    // Read and output the next chunk.
    echo fread($fh, $maxRead);

    // Flush the output buffer to free memory.
    ob_flush();
}

// Exit to make sure not to output anything else.
exit;



ऊपर दिए गए स्वीकृत उत्तर का एक संशोधन, जो रनटाइम में एमआईएमई प्रकार का भी पता लगाता है:

$finfo = finfo_open(FILEINFO_MIME_TYPE);
header('Content-Type: '.finfo_file($finfo, $path));

$finfo = finfo_open(FILEINFO_MIME_ENCODING);
header('Content-Transfer-Encoding: '.finfo_file($finfo, $path)); 

header('Content-disposition: attachment; filename="'.basename($path).'"'); 
readfile($path); // do the double-download-dance (dirty but worky)



इसे इस्तेमाल करे:

header('Content-type: audio/mp3'); 
header('Content-disposition: attachment; 
filename=“'.$trackname'”');                             
readfile('folder name /'.$trackname);          
exit();



Related