2010-01-08 17 views
14

मैं PHP में ब्राउज़र में एक मौजूदा फ़ाइल की सेवा करना चाहता हूं। मैंने छवि/जेपीईजी के बारे में उदाहरण देखे हैं लेकिन यह फ़ंक्शन डिस्क पर फ़ाइल को सहेजने लगता है और आपको पहले सही आकार वाली छवि ऑब्जेक्ट बनाना है (या मुझे इसे समझ में नहीं आता है :))ब्राउज़र पर डिस्क पर PHP आउटपुट फ़ाइल

एएसपी में। नेट मैं इसे बाइट सरणी में फ़ाइल पढ़कर करता हूं और फिर संदर्भ को कॉल करता हूं। रेस्पॉन्स.बिनरीवाइट (बाइटियर), इसलिए मैं PHP में कुछ ऐसा ढूंढ रहा हूं।

मिशेल

उत्तर

26

fpassthru() कि वास्तव में आप क्या जरूरत है क्या करना चाहिए नहीं है। निम्न उदाहरण के बारे में पढ़ने के लिए मैनुअल प्रविष्टि देखें:

<?php 

// open the file in a binary mode 
$name = './img/ok.png'; 
$fp = fopen($name, 'rb'); 

// send the right headers 
header("Content-Type: image/png"); 
header("Content-Length: " . filesize($name)); 

// dump the picture and stop the script 
fpassthru($fp); 
exit; 

?> 

PHP के फाइल सिस्टम कार्यों के सभी के लिए here देखें।

यदि यह एक बाइनरी फ़ाइल है जिसे आप डाउनलोड के लिए ऑफ़र करना चाहते हैं, तो आप शायद सही हेडर भेजना चाहते हैं ताकि "जैसे ही सहेजें .." संवाद पॉप अप हो। शीर्षलेखों को भेजने के लिए एक अच्छा उदाहरण के लिए this question पर पहला उत्तर देखें।

+1

क्या होगा यदि मेरे पास पहले से ही एक वैरिएबल के रूप में संग्रहीत बाइनरी सामग्री है। मैं इसे डाउनलोड करने योग्य फ़ाइल के रूप में ब्राउज़र में कैसे आउटपुट करूं? – CMCDragonkai

2

यह मिलना चाहिए आप आरंभ: http://de.php.net/manual/en/function.readfile.php

संपादित करें: अपने वेब सर्वर इसका समर्थन करता है, का उपयोग कर

header('X-Sendfile: ' . $filename); 

जहां फ़ाइल नाम

/var/www/www.example.org/downloads/example.zip 
की तरह एक स्थानीय पथ है

readfile() से तेज़ है।

(हेडर का उपयोग कर के लिए सामान्य सुरक्षा कारणों से() लागू)

+0

+1 का उपयोग करें। – Christian

1

मेरी वेबसाइट और वेबसाइट दोनों के लिए मैं ग्राहकों के लिए बनाता हूं, मैं एक PHP स्क्रिप्ट का उपयोग करता हूं जिसे मैंने बहुत समय पहले पाया था।

यह यहां पाया जा सकता: http://www.zubrag.com/scripts/download.php

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

उम्मीद है कि इससे मदद मिलती है।

+0

लिपि के लिए धन्यवाद। अगर मैं अपनी पहली स्क्रिप्ट का विस्तार करना चाहता हूं तो मैं निश्चित रूप से इसका उपयोग करूंगा। – Michel

2

मैं readfile का उपयोग करें() (http://www.php.net/readfile) ...

लेकिन क्या आप वाकई हेडर के साथ सही "सामग्री प्रकार" सेट बनाने के लिए() है, तो ब्राउज़र क्या फ़ाइल के साथ क्या करना जानता है।

आप ब्राउजर को इसे प्रदर्शित करने के लिए प्लग-इन का उपयोग करने की बजाय फ़ाइल डाउनलोड करने के लिए मजबूर कर सकते हैं (जैसे पीडीएफ के लिए), मुझे हमेशा थोड़ा "हैकी" देखने के लिए यह मिला, लेकिन यह समझाया गया है उपरोक्त लिंक

9

मैं `एक्स Sendfile` के लिए इस

if (file_exists($file)) { 


     header('Content-Description: File Transfer'); 
     header('Content-Type: application/octet-stream'); 
     header('Content-Disposition: attachment; filename='.basename($file)); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . filesize($file)); 

     ob_clean(); 
     flush(); 
     readfile($file); 
     exit; 

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