2010-07-15 8 views
7

सवाल यह सब कहता है .. मैं उपयोगकर्ताओं को अपनी वेबसाइट से एक फ़ाइल डाउनलोड करने और नहीं देख सकता कि यह फ़ाइल किस फ़ाइल से आती है? मैं समझता हूं कि डाउनलोड.php जैसी कुछ चीज़ों की आवश्यकता हो सकती है जो गेटवे के रूप में कार्य करेगी लेकिन उस चरण से पहले, मुझे पता है कि आगे क्या स्क्रिप्ट करना है ... यदि यह आपको पूरा कोड लिखने के लिए परेशान करता है, तो कुछ फ़ंक्शन जिन नामों का मुझे उपयोग करने की आवश्यकता होनी चाहिए वे वास्तव में आसान होंगे!एक PHP स्क्रिप्ट उपयोगकर्ताओं को मेरी वेबसाइट में वास्तविक फ़ाइल लिंक प्रकट किए बिना मेरी वेबसाइट से एक फ़ाइल डाउनलोड करने देता है?

उत्तर

10

फ़ाइल (, GET चर है कि एक डेटाबेस में एक पंक्ति की आईडी से मेल खाता है, या इन पंक्तियों के साथ कुछ उदाहरण के लिए) डाउनलोड करने के लिए पहचान करने के लिए एक रास्ता खोजें। सुनिश्चित करें कि यह वैध है, क्योंकि आप नहीं चाहते हैं कि आपके उपयोगकर्ता आपकी साइट से कुछ भी डाउनलोड कर सकें। फिर, Content-Disposition के साथ ब्राउज़र को फ़ाइल को डाउनलोड करने के लिए, और readfile आउटपुट करने के लिए उपयोग करें।

उदाहरण के लिए:

<?php 

$id = intval($_GET['id']); 
$query = mysql_query('SELECT file_path FROM files WHERE id = ' . $id); 
if (($row = mysql_fetch_row($query)) !== false) 
{ 
    header('Content-Disposition: attachment; filename=' . basename($row[0])); 
    readfile($row[0]); 
} 
exit; 

?> 
+0

मुझे एक सीएसवी फ़ाइल में ईमेल एड्रेसस निर्यात करने के लिए एक समान तकनीक का उपयोग करना याद है। मैक के लिए सफारी द्वारा सामग्री-प्रकार शीर्षलेख को अनदेखा किया गया था। – Keyo

+0

क्या यह स्क्रिप्ट htaccess-proof है? विधि को बाईपास करने के मामले में वास्तविक URL तक पहुंच से इंकार करने के लिए मेरे पास एक htaccess नियम है। क्या 'इन सभी से इनकार करते हैं' इस स्क्रिप्ट को भी प्रभावित करता है? –

+0

@CodigosTutoriales, .htaccess फ़ाइलों में नियम केवल क्लाइंट से वेब अनुरोधों को प्रभावित करते हैं। वे सर्वर पर फ़ाइलों को पढ़ने से आपके सर्वर कोड को रोकने के लिए कुछ भी नहीं करते हैं। – zneak

1

आप header() समारोह जो documented here

है मैं नीचे स्क्रॉल और 1 उदाहरण को देख सुझाव है कि उपयोग कर सकते हैं। ऐसा लगता है कि आप वही कर रहे हैं जो आप चाहते हैं।

+0

बस Shedo चुंग-ही Surasi के लिए एक नोट - दूसरे उदाहरण भी है कि कैसे आप एक फ़ाइल नाम है कि मूल फ़ाइल का नाम से अलग है निर्दिष्ट कर सकते हैं (जैसा कि आप अपने प्रश्न में उल्लेख किया है) आपको पता चलता है। – jerebear

0

readfile आप क्या चाहते हैं क्या करना चाहिए। वेब सर्वर रूट के बाहर वास्तविक फ़ाइल रखें, और फ़ाइल को वापस जाने से पहले कुछ प्रमाण-पत्रों की आवश्यकता है।

4

आप किसी यूआरएल से उन्हें यूआरएल को बताने के बिना फाइल डाउनलोड नहीं कर सकते हैं। HTTP विनिर्देश के तहत यह संभव नहीं है। डाउनलोड किए गए कुछ भी एक यूआरएल है।

आप कर सकते हैं, हालांकि, एक डाउनलोड URL कि केवल एक बार काम करता है, या कुछ विशेष जानकारी POST पद्धति द्वारा पारित किया जा करने की आवश्यकता है है। आप जीईटी या पोस्ट वैरिएबल में टोकन की जांच करते हैं और इसे एक बार इस्तेमाल होने के बाद उस टोकन को अमान्य कर देते हैं।

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