2012-05-11 12 views
5

मेरे पास कोई प्रश्न है यदि मैं कर सकता हूं। मैं $source नामक एक चर है और इस उदाहरण ./uploads/2012/some-document.pdfयह देखने के लिए स्ट्रिंग की जांच कर रहा है कि फ़ाइल स्थानीय रूप से मौजूद है या नहीं

के लिए, एक फाइल करने के लिए एक रिश्तेदार पथ होना चाहिए अब, यह $source चर, उपयोगकर्ता इनपुट शामिल होंगे $ _GET और $ _POST के माध्यम से। मैं नहीं चाहता कि लोग यूआरएल दर्ज करें और मैं केवल कुछ करना चाहता हूं अगर फ़ाइल स्थानीय सर्वर पर केवल मौजूद है।

मेरा प्रश्न यह है कि यह जांचने का सबसे अच्छा तरीका क्या है कि फ़ाइल केवल स्थानीय सर्वर पर मौजूद है या नहीं?


यह मैं अब तक क्या मिल गया है है: सर्वर कॉन्फ़िगरेशन के आधार

1) file_exists सच वापस आ सकते हैं, तो मैं stripos के साथ-साथ इस का उपयोग करता है, तो स्ट्रिंग के पहले कुछ charatcers जाँच करने के लिए कर सकता है http: // तो जैसे:

if(file_exists($source) && stripos($source,'http://')!==0) { 
    echo 'File exists on local'; 
} 

हालांकि, नकारात्मक पक्ष यह होगा मैं ऐसे https के रूप में सभी अलग URL प्रकार निर्दिष्ट करना होगा: //, http: // और एफ़टीपी: // सिर्फ करने के लिए सुरक्षित रहना।

2) मैं फ़ाइल का पूर्ण पथ प्राप्त करने के लिए realpath का उपयोग करता हूं, और यह पाया नहीं जा सकता है अगर यह पाया जा सकता है। यह बहुत ठोस लगता है, लेकिन 100% यह

3) पहले स्ट्रिंग में सभी यूआरएल उल्लेखों को हटाने के लिए preg_replace का उपयोग करें, और फिर file_exists का उपयोग करें। हालांकि यह शायद सबसे सुरक्षित होगा, यह सबसे अधिक गहन होगा और मैं इस विधि का उपयोग नहीं करना चाहूंगा।

उत्तर

3

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

if (parse_url($path, PHP_URL_SCHEME)) { 
    // has something:// so ignore 
} 

यह भी विशेषता रैपर के साथ काम करेगा इस तरह के php://, zlib://, आदि के रूप में ...

आप file://:

file_exists('file://' . $path); 
+0

यह parse_url का उपयोग करने के लिए एक उत्कृष्ट सुझाव है, मुझे लगता है कि और file_exists अच्छा होगा। धन्यवाद –

+0

दूरस्थ फ़ाइलों के साथ संयोजन में file_exists() और is_file() का उपयोग कर विंडोज के तहत समस्याएं हो सकती हैं। ऐसा लगता है जैसे विंडोज इसे डाउनलोड कर रहा है या ऐसा कुछ। बेहतर उपयोग parse_url() और खाली मेजबान के लिए जाँच करें। – redaxmedia

2

realpath() के साथ जाएं (file_exists के साथ संयोजन में)। यह आपके लिए यूआरएल फ़िल्टर करेगा, और आपको फ़ाइल पर मौजूद है या नहीं, इस पर ठोस विश्वसनीय परिणाम प्राप्त करना चाहिए।

+0

धन्यवाद, धन्यवाद, उन दोनों के संयोजन के बारे में नहीं सोचा, लगता है कि वे एक साथ अच्छी तरह से काम करेंगे। चीयर्स –

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