मेरे पास कोई प्रश्न है यदि मैं कर सकता हूं। मैं $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
का उपयोग करें। हालांकि यह शायद सबसे सुरक्षित होगा, यह सबसे अधिक गहन होगा और मैं इस विधि का उपयोग नहीं करना चाहूंगा।
यह parse_url का उपयोग करने के लिए एक उत्कृष्ट सुझाव है, मुझे लगता है कि और file_exists अच्छा होगा। धन्यवाद –
दूरस्थ फ़ाइलों के साथ संयोजन में file_exists() और is_file() का उपयोग कर विंडोज के तहत समस्याएं हो सकती हैं। ऐसा लगता है जैसे विंडोज इसे डाउनलोड कर रहा है या ऐसा कुछ। बेहतर उपयोग parse_url() और खाली मेजबान के लिए जाँच करें। – redaxmedia