2012-09-11 12 views
6

मैं रूट निर्देशिका पर वापस जाने के लिए एक बेहतर तरीका सीखने की कोशिश कर रहा हूं। मैंने सुना है कि $ _SERVER का उपयोग सबसे सुरक्षित तरीका नहीं है। मैं सोच रहा हूं कि कोई बेहतर तरीका है या नहीं। तो मैं example.com/exp/my.php

यहाँ मैं क्या मिला है यूआरएल पर कुछ इस तरह हो सकता है।

include ($_SERVER['DOCUMENT_ROOT'].'/cpages/cmain/func/init.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/toppart.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/boxes/image.php'); 
include($_SERVER['DOCUMENT_ROOT'].'/cpages/bottonpart.php'); 

मैं

define ('DOCUMENT_ROOT', dirname(__FILE__)); 
include (DOCUMENT_ROOT.'/cpages/cmain/func/init.php'); 
include(DOCUMENT_ROOT.'/cpages/toppart.php'); 
include(DOCUMENT_ROOT.'/cpages/boxes/image.php'); 
include(DOCUMENT_ROOT.'/cpages/bottonpart.php'); 

के लिए इसे बदल लेकिन अब यह मुझे एक त्रुटि

Warning: include(C:\xampp\htdocs\backbone\image/cpages/cmain/func/init.php) 

और ($_SERVER['DOCUMENT_ROOT'] नहीं यह मुझे उनकी यह तय करने के लिए एक तरीका है कि त्रुटि दिया था देने है?

+1

क्यों [ '$ _SERVER'] (http://www.php.net/manual/en/reserved.variables.server.php)' [ 'DOCUMENT_ROOT'] 'असुरक्षित हो सकता है? –

+3

यह प्रश्न देखें: http: // stackoverflow।कॉम/प्रश्न/390276/कैसे-टू-प्रोग्रामेटिक रूप से-निर्धारित-द-दस्तावेज़-रूट-इन-पीएचपी –

+0

@ जोनाथन रेनहार्ट निश्चित नहीं है, लेकिन –

उत्तर

4

समस्या यह है कि आप $ _SERVER सरणी में कुछ भी भरोसा नहीं कर सकते हैं, क्योंकि यह संभव है कि आप सभी प्रकार के मूल्य प्राप्त कर सकें।

तो आप निम्नलिखित नियमों की आवश्यकता होगी:

  1. तो जनता कोड लिखने, एक कॉन्फ़िग फ़ाइल में पथ डाल दिया। फिर यदि उपयोगकर्ता के सर्वर पर $ _SERVER सही नहीं है, तो वे इसे ओवरराइट कर सकते हैं। यदि आप कुछ सरल नियमों का उपयोग करना चाहते हैं (नीचे देखें) तो आप DOCUMENT_ROOT का उपयोग करके अपनी कॉन्फ़िगरेशन को पूर्व-पूर्ण करने में सहायता कर सकते हैं।

  2. यदि आपके स्वयं के उपयोग के लिए कोड लिखना केवल एक या दो सर्वर के बीच हॉप करने जा रहा है, तो मान लें कि DOCUMENT_ROOT सही है, और यदि आप सर्वर ले जाते हैं और इसकी आवश्यकता होती है तो इसे rrrite।


कैसे करता है, तो एक config चर पूर्व संकलन डिफ़ॉल्ट DOCUMENT_ROOT प्रदान करने के लिए।

  1. अपाचे पर, CONTEXT_DOCUMENT_ROOT देखें। DOCUMENT_ROOT लगभग हमेशा सुरक्षित है, लेकिन कुछ ऐसे स्थान हैं जहां यह गलत हो सकता है - और यह आपके द्वारा प्रदान किए गए लिंक में है। यदि अपाचे mod_alias या mod user_dir का उपयोग कर रहा है। इन मामलों में, आपको CONTEXT_DOCUMENT_ROOT का उपयोग करने की आवश्यकता है जो सुरक्षित है। लेकिन ध्यान दें कि अपाचे केवल एक महीने या उससे भी अधिक के लिए CONTEXT_DOCUMENT_ROOT जोड़ रहा है, इसलिए जब तक कि आपके पास नवीनतम इंस्टॉल न हो, आपको DOCUMENT_ROOT पर वापस गिरने की आवश्यकता है।
  2. DOCUMENT_ROOT - देखने के ऊपर
  3. उपयोग PATH_TRANSLATED (कम PHP_SELF की लम्बाई) वर्तमान कार्यशील निर्देशिका के पथ contruct करने के लिए।
  4. उपयोग SCRIPT_FILE_NAME (कम PHP_SELF की लम्बाई) वर्तमान कार्यशील निर्देशिका के पथ contruct करने के लिए।
  5. वैश्विक चर __DIR__ वर्तमान कार्यशील निर्देशिका को

तब प्रयोग करें, आप उन विवरण है जब, एक फ़ाइल आप जानते हैं कि निर्देशिका में मौजूद है के लिए जाँच - और अगर ऐसा होता है, तो आप शायद सही रास्ता मिल गया है । यदि नहीं, तो अगले के साथ प्रयास करें।

+0

धन्यवाद एक सुरक्षित तरीका ढूंढने के बेहतर यह है कि धन्यवाद Ia –

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