Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP में File Download Force करना


PHP में headers का उपयोग करके browser को file download करने के लिए बाध्य करने के तरीके।

विधि 1: Basic Force Download (किसी भी फाइल प्रकार के लिए)

<?php
function forceDownload($filePath, $fileName = null) {
    if (!file_exists($filePath)) {
        http_response_code(404);
        die('File not found');
    }
    
    $fileName = $fileName ?? basename($filePath);
    $fileSize = filesize($filePath);
    $mimeType = mime_content_type($filePath);
    
    // Cache headers साफ करें
    header('Pragma: public');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Cache-Control: private', false);
    
    // Download headers
    header('Content-Type: ' . $mimeType);
    header('Content-Disposition: attachment; filename="' . $fileName . '"');
    header('Content-Length: ' . $fileSize);
    header('Content-Transfer-Encoding: binary');
    
    // Output buffering साफ करें
    if (ob_get_level()) {
        ob_end_clean();
    }
    
    // File stream करें (memory efficient)
    $handle = fopen($filePath, 'rb');
    while (!feof($handle)) {
        echo fread($handle, 8192);
        flush();
    }
    fclose($handle);
    exit;
}

// उपयोग
forceDownload('/path/to/document.pdf', 'my-document.pdf');

विधि 2: Specific MIME Types के लिए

<?php
// CSV download
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename="export.csv"');
header('Pragma: no-cache');
header('Expires: 0');
echo $csvData;
exit;

// JSON download
header('Content-Type: application/json; charset=utf-8');
header('Content-Disposition: attachment; filename="data.json"');
echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
exit;

// Image download
header('Content-Type: image/jpeg');
header('Content-Disposition: attachment; filename="photo.jpg"');
readfile('photo.jpg');
exit;

विधि 3: .htaccess के साथ (सभी फाइलों के लिए)

# .htaccess में
# सभी फाइलों को download के लिए force करें

    ForceType application/octet-stream
    Header set Content-Disposition "attachment"


# या specific directory के लिए

    ForceType application/octet-stream
    Header set Content-Disposition "attachment"

महत्वपूर्ण नोट्स और सर्वोत्तम अभ्यास

  • कोई output नहीं headers से पहले (whitespace, BOM, echo कुछ भी नहीं)
  • Large files के लिए: readfile() या chunked reading उपयोग करें (memory limit से बचने के लिए)
  • Filename encoding: RFC 5987 के लिए filename*=UTF-8''... उपयोग करें
  • Security: Path traversal रोकें - basename() और वैलिडेशन उपयोग करें
  • Range requests: Resume support के लिए HTTP_RANGE हैंडल करें

उन्नत: Range Requests Support (Resume Capable)

function forceDownloadWithRange($filePath, $fileName = null) {
    $fileName = $fileName ?? basename($filePath);
    $fileSize = filesize($filePath);
    $mimeType = mime_content_type($filePath);
    
    $start = 0;
    $end = $fileSize - 1;
    $statusCode = 200;
    
    if (isset($_SERVER['HTTP_RANGE'])) {
        $range = $_SERVER['HTTP_RANGE'];
        if (preg_match('/bytes=(\d+)-(\d*)/', $range, $matches)) {
            $start = intval($matches[1]);
            $end = $matches[2] ? intval($matches[2]) : $fileSize - 1;
            $statusCode = 206; // Partial Content
        }
    }
    
    $length = $end - $start + 1;
    
    header('Content-Type: ' . $mimeType);
    header('Content-Disposition: attachment; filename="' . $fileName . '"');
    header('Content-Length: ' . $length);
    header('Accept-Ranges: bytes');
    header('Content-Range: bytes ' . $start . '-' . $end . '/' . $fileSize);
    http_response_code($statusCode);
    
    $handle = fopen($filePath, 'rb');
    fseek($handle, $start);
    while (!feof($handle) && $length > 0) {
        $chunk = min(8192, $length);
        echo fread($handle, $chunk);
        $length -= $chunk;
        flush();
    }
    fclose($handle);
    exit;
}
  1. विंडोज में किसी फाइल या फोल्डर को फोर्स डिलीट कैसे करें विंडोज में किसी फाइल या फोल्डर को फोर्स डिलीट कैसे करें

    अपने विंडोज पीसी से एक जिद्दी फाइल या फोल्डर को हटाने की कोशिश करना निराशाजनक हो सकता है। उदाहरण के लिए, आप डिलीट दबा सकते हैं और सोच सकते हैं कि फाइल या फोल्डर चला गया है, केवल उसे उसी स्थान पर ढूंढने के लिए जहां से आपने इसे हटाया था। ऐसे कई कारण हैं जिनकी वजह से आप किसी फाइल या फोल्डर को नहीं हटा

  1. Windows 10 में फाइलों को फोर्स डिलीट कैसे करें: त्वरित और सुरक्षित तरीके Windows 10 में फाइलों को फोर्स डिलीट कैसे करें: त्वरित और सुरक्षित तरीके

    सिस्टम स्टोरेज स्पेस को ऑप्टिमाइज़ करने के लिए, आपको अपने सिस्टम में अनावश्यक फाइलों को बार-बार डिलीट करने की आवश्यकता होती है। यह ऑपरेटिंग सिस्टम की गति और प्रदर्शन को बेहतर बनाने में मदद करता है। हालांकि, आपको पता चल सकता है कि आप Windows 10 में फाइल या फोल्डर डिलीट नहीं कर सकते। आप एक ऐसी फाइल का

  1. अपनी वर्डप्रेस साइट सुरक्षित करें: wp-config.php को हैकर्स से बचाएं अपनी वर्डप्रेस साइट सुरक्षित करें: wp-config.php को हैकर्स से बचाएं

    हैकर की मानसिकता से सोचने की कोशिश करें। क्या आप उस प्लेटफॉर्म में सेंध लगाना पसंद नहीं करेंगे जिसका उपयोग हजारों वेबसाइटों द्वारा किया जाता है या कई वेबसाइटों के साथ प्लेटफॉर्म पर ब्रूट-फोर्स अटैक करना पसंद नहीं करेंगे? WP-Scanner जैसे टूल्स के ओपन सोर्स उपलब्ध होने के साथ, यहां तक कि एक नौसिखिया स