2011-08-08 19 views
13

आइए कहें कि मेरे पास एक सादा पाठ फ़ाइल example.txt है और मेरे पास मेरे वेब-सर्वर readfile.php पर एक PHP स्क्रिप्ट है।स्क्रिप्ट को फ़ाइल पढ़ने की अनुमति दें लेकिन उपयोगकर्ताओं को फ़ाइल को सीधे देखने से रोकें

मैं क्या करने में सक्षम होना चाहता हूँ उन http://www.example.com/example.txt टाइपिंग और पाठ फ़ाइल पर सीधे देखने से रोकने के लिए है लेकिन मैं अभी भी (लोगों के लिए http://www.example.com/readfile.php जो फ़ाइल example.txt से पढ़ता है और इसके साथ कुछ करता है लोड करने के लिए समर्थ बनाना चाहते संभवतः फ़ाइल की सामग्री प्रदर्शित करता है)।

इसके अलावा, अगर यह किया जा सकता है, क्या यह करने के लिए सबसे अच्छा तरीका है?

+0

http://httpd.apache.org/docs/current/mod/mod_rewrite.html –

+0

आपका मतलब है "... लोगों को http://www.example.com/readfile.php लोड करने में सक्षम होना चाहते हैं" "readfile.txt" नहीं। –

उत्तर

14

हाँ, यह करने के लिए आसान है।

उपयोगकर्ताओं को example.txt तक पहुंचने से रोकने के दो मुख्य तरीके हैं। सबसे पहले इसे अपने वेब फ़ोल्डर के बाहर एक फ़ोल्डर में रखना है (आमतौर पर www या public_html कहा जाता है), दूसरी बात यह है कि .htaccess फ़ाइल को अपने example.txt स्क्रिप्ट के साथ फ़ोल्डर में डालें जो फ़ाइल को पूरी तरह से एक्सेस करता है। .htaccess तरह

<files "example.txt"> 
deny from all 
</files> 

लगेगा लेकिन आप *.txt की तरह कुछ करने के लिए example.txt बदल सकता है अगर आप फ़ोल्डर में सभी .txt फ़ाइलें ब्लॉक करना चाहता था।

तो फिर आप अपने readfile.php में file_get_contents() का उपयोग पाठ फ़ाइल की सामग्री को प्राप्त करने के लिए कर सकते हैं, या आप उपयोग कर सकते हैं फ़ाइल अगर आप सिर्फ उत्पादन करना चाहते हैं readfile

+0

+1। धन्यवाद। – mtahmed

+0

@mtahmed आपका स्वागत है :) स्वीकार करने के लिए धन्यवाद! – Paulpro

+0

मैंने .htaccess फ़ाइल को जोड़ा, हालांकि फ़ाइल_get_contents() :: कॉल करने का प्रयास करते समय मुझे एक त्रुटि मिली: स्ट्रीम खोलने में विफल: HTTP अनुरोध विफल! HTTP/1.1 403 निषिद्ध। क्या मुझे फ़ाइल तक पहुंचने के लिए PHP के लिए कोई अनुमतियां बदलनी होंगी? मैंने बिना किसी किस्मत के सीयूआरएल का उपयोग करने की कोशिश की। –

8

बस उन फ़ाइलों को स्टोर करें जिन्हें आप सार्वजनिक रूप से सुलभ नहीं करना चाहते हैं वेब्रूट के बाहर।

/home 
    example.txt 
    /www 
     readfile.php 

तो /home/www/ अपने सार्वजनिक webroot फ़ोल्डर है, यह ऊपर किसी भी फ़ाइल वेब सर्वर के माध्यम से सुलभ नहीं है। readfile.php हालांकि अभी भी ../example.txt पर पूरी तरह से ठीक फ़ाइल तक पहुंच सकते हैं।

+0

वाह ... मैंने इस बारे में क्यों नहीं सोचा? धन्यवाद! फ़ाइल को वेब निर्देशिका में डालने और .htaccess का उपयोग करने के लिए – mtahmed

0

आप सार्वजनिक फ़ोल्डर की फ़ाइल "example.txt" बाहर रख दिया और जैसे $content = file_get_contents("../example.txt");

1

readfile.php से पढ़ा आप, webroot में फ़ाइलों को स्टोर करने फिर एक फ़ोल्डर में फ़ाइलें डाल दिया और की जरूरत है सकते हैं उस फ़ोल्डर तक पहुंच से इंकार कर दें। आप अपाचे का उपयोग कर रहे हैं, तो आप इस प्रकार का फ़ाइल कॉल कर सकते हैं deny from all

0

में फ़ोल्डर और प्रकार में एक .htaccess फ़ाइल बनाने के लिए और लोगों को फ़ाइल नाम नहीं दिख रहा है:

<?php 
$file = 'example.txt'; 

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; 
} 
?> 

(स्रोत: php .net)

क्या आप के लिए है कि काम करता है?

1

मैं कुछ इसी तरह जहां फाइलों अत्यंत संवेदनशील होते हैं किया है सूचना और मैं केवल मान्य उपयोगकर्ताओं को एक HTTPS कनेक्शन के माध्यम से फ़ाइल को पुनर्प्राप्त करने में सक्षम होना चाहता हूं।

मैं एक निर्देशिका पथ क्या वेब सर्वर (अपाचे, मेरे लिए) देख सकते हैं के दायरे से बाहर है कि में फाइल रख:

मैं क्या यह किया गया था। इसलिए, कोई संभावित यूआरएल नहीं है जिसके परिणामस्वरूप फाइल सीधे वेब सर्वर द्वारा की जा रही है।फिर मैंने एक स्क्रिप्ट बनाई जो उपयोगकर्ताओं को लॉगिन करने की अनुमति देता है, वे जिस फ़ाइल को चाहते हैं उस पर क्लिक करें, और फिर PHP स्क्रिप्ट फ़ाइल को पढ़ती है, उचित शीर्षलेख रखती है, और फिर फ़ाइल को उपयोगकर्ता के कंप्यूटर पर स्ट्रीम करती है।

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

शुभकामनाएं !!

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

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