"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > मैं अपनी PHP फ़ाइल ट्रांसफ़र स्क्रिप्ट में पुनः प्रारंभ करने योग्य डाउनलोड कैसे सक्षम कर सकता हूँ?

मैं अपनी PHP फ़ाइल ट्रांसफ़र स्क्रिप्ट में पुनः प्रारंभ करने योग्य डाउनलोड कैसे सक्षम कर सकता हूँ?

2025-01-19 को प्रकाशित
ब्राउज़ करें:136

How Can I Enable Resumable Downloads in My PHP File Transfer Script?

PHP फ़ाइल स्थानांतरण स्क्रिप्ट के साथ पुन: प्रारंभ करने योग्य डाउनलोड सक्षम करना

परिचय

सुरक्षा उद्देश्यों के लिए PHP स्क्रिप्ट का उपयोग करके फ़ाइलों को स्थानांतरित करते समय, डाउनलोड करने योग्य फ़ाइलों का पूर्ण पथ अक्सर छुपाने की जरूरत पड़ती है. हालाँकि, पारंपरिक PHP फ़ाइल स्थानांतरण स्क्रिप्ट पुन: प्रारंभ करने योग्य डाउनलोड का समर्थन नहीं कर सकती हैं, जिससे कनेक्शन में रुकावट का अनुभव करने वाले अंतिम उपयोगकर्ताओं के लिए असुविधा हो सकती है। लिया गया:

एक्सेप्ट-रेंज भेजें: बाइट्स हेडर:

यह हेडर क्लाइंट को सूचित करता है कि आंशिक सामग्री समर्थित है।
  1. आंशिक सामग्री अनुरोधों को संभालें: रेंज के साथ अनुरोध प्राप्त करते समय: बाइट्स = x-y हेडर, रेंज को पार्स करें, वांछित ऑफसेट की तलाश करें फ़ाइल करें, और अनुरोधित बाइट रेंज भेजें।
  2. आंशिक सामग्री HTTP स्थिति कोड सेट करें: HTTP/1.0 के साथ उत्तर दें सफल आंशिक स्थानांतरण को इंगित करने के लिए 206 आंशिक सामग्री।
  3. PHP कार्यान्वयन
  4. नीचे PHP में इन सिद्धांतों का एक नमूना कार्यान्वयन है:

$filesize = filesize($ फ़ाइल); $ऑफ़सेट = 0; $लंबाई = $फ़ाइलआकार; यदि (isset($_SERVER['HTTP_RANGE'])) { preg_match('/bytes=(\d )-(\d )?/', $_SERVER['HTTP_RANGE'], $matches); $ऑफ़सेट = अंतराल($मिलान[1]); $लंबाई = अंतराल($मिलान[2]) - $ऑफ़सेट; } $फ़ाइल = फ़ोपेन($फ़ाइल, 'आर'); fseek($फ़ाइल, $ऑफ़सेट); $डेटा = फ़्रेड($फ़ाइल, $लंबाई); fclose($फ़ाइल); यदि ($ऑफ़सेट > 0) { हेडर('HTTP/1.1 206 आंशिक सामग्री'); हेडर ('सामग्री-श्रेणी: बाइट्स' . $ऑफ़सेट . '-' . ($ऑफ़सेट $लंबाई) . '/' . $फ़ाइल आकार); } हेडर ('सामग्री-प्रकार:' . $ctype); शीर्षलेख('सामग्री-लंबाई:' . $फ़ाइलआकार); शीर्षलेख('सामग्री-विस्थापन: अनुलग्नक; फ़ाइल नाम='' . $फ़ाइलनाम . ''''); हेडर ('स्वीकार-श्रेणियाँ: बाइट्स'); print($data);

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

$filesize = filesize($file);

$offset = 0;
$length = $filesize;

if (isset($_SERVER['HTTP_RANGE'])) {
    preg_match('/bytes=(\d )-(\d )?/', $_SERVER['HTTP_RANGE'], $matches);

    $offset = intval($matches[1]);
    $length = intval($matches[2]) - $offset;
}

$file = fopen($file, 'r');
fseek($file, $offset);
$data = fread($file, $length);
fclose($file);

if ($offset > 0) {
    header('HTTP/1.1 206 Partial Content');
    header('Content-Range: bytes ' . $offset . '-' . ($offset   $length) . '/' . $filesize);
}

header('Content-Type: ' . $ctype);
header('Content-Length: ' . $filesize);
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Accept-Ranges: bytes');

print($data);
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3