2008-10-06 16 views
10

मैं अपने आवेदन के आधार यूआरएल प्राप्त करना चाहते हैं, तो मैं स्वचालित रूप से अपने आवेदन पेड़ में अन्य फ़ाइलों को संदर्भित कर सकते ...मैं एप्लिकेशन का बेस यूआरएल कैसे ढूंढ सकता हूं?

तो अगर एक फ़ाइल, अपने आवेदन के आधार में एक फ़ाइल config.php दिया एक उपनिर्देशिका में यह शामिल है, जानता है कि यूआरएल को उपसर्ग कैसे करना है।

application/config.php 
application/admin/something.php 
application/css/style.css 

तो यह देखते हुए कि http://www.example.com/application/admin/something.php एक्सेस किया जाता है, मैं इसे पता है कि सीएसएस फ़ाइल $approot/css/style.css में है सक्षम होना चाहते हैं। इस मामले में, $approot "/application" है लेकिन मैं यह जानना चाहता हूं कि एप्लिकेशन कहीं और स्थापित है या नहीं।

मुझे यकीन है कि अगर यह संभव, कई अनुप्रयोगों (phpMyAdmin, Squirrelmail मुझे लगता है कि) है नहीं कर रहा हूँ एक config चर के साथ शुरू करने के लिए सेट करना होगा। अगर यह सिर्फ पता था तो यह अधिक उपयोगकर्ता के अनुकूल होगा।

उत्तर

15

मैं होमब्री फ्रेमवर्क में निम्न का उपयोग करता हूं ... इसे अपने एप्लिकेशन के मूल फ़ोल्डर में फ़ाइल में रखें और बस इसे शामिल करें।

define('ABSPATH', str_replace('\\', '/', dirname(__FILE__)) . '/'); 

$tempPath1 = explode('/', str_replace('\\', '/', dirname($_SERVER['SCRIPT_FILENAME']))); 
$tempPath2 = explode('/', substr(ABSPATH, 0, -1)); 
$tempPath3 = explode('/', str_replace('\\', '/', dirname($_SERVER['PHP_SELF']))); 

for ($i = count($tempPath2); $i < count($tempPath1); $i++) 
    array_pop ($tempPath3); 

$urladdr = $_SERVER['HTTP_HOST'] . implode('/', $tempPath3); 

if ($urladdr{strlen($urladdr) - 1}== '/') 
    define('URLADDR', 'http://' . $urladdr); 
else 
    define('URLADDR', 'http://' . $urladdr . '/'); 

unset($tempPath1, $tempPath2, $tempPath3, $urladdr); 

उपरोक्त कोड दो स्थिरांक परिभाषित करता है। ABSPATH में एप्लिकेशन की रूट (स्थानीय फ़ाइल सिस्टम) का पूर्ण पथ होता है जबकि URLADDR में एप्लिकेशन का पूर्णतः योग्य URL होता है। यह mod_rewrite परिस्थितियों में काम करता है। आवेदन की

+0

वाह, ऐसा लगता है कि काम करता है। – DGM

+0

नहीं, ऐसा नहीं है। यह भौतिक फाइल सिस्टम पथ देता है, न कि यूआरएल पथ। – Gumbo

+0

ABSPATH भौतिक फाइल सिस्टम पथ लौटाता है, URLADDR एप्लिकेशन का पूरी तरह से योग्य यूआरएल देता है। –

1

जब तक आप इसे स्वयं ट्रैक न करें, मुझे विश्वास नहीं है कि इसकी परिभाषा होगी। या इसके बजाय, आप कुछ ऐसा ट्रैक करने के लिए PHP से पूछ रहे हैं जिसे आप कुछ हद तक मनमाने ढंग से परिभाषित कर रहे हैं।

लंबी और यह की कमी है, अगर मैं आपके सवाल का सही ढंग से समझ रहा हूँ, मैं नहीं मानता कि मौजूद है के लिए आप क्या कह रहे हैं, कम से कम के रूप में नहीं "मूल" पीएचपी; एक दिया गया ढांचा एक निर्देशिका संरचना से संबंधित "रूट" यूआरएल प्रदान कर सकता है जो यह समझता है।

क्या यह समझ में आता है?

2

REQUEST_URI dirname() के साथ संयुक्त आप अपने वर्तमान निर्देशिका बताओ, URL पथ के लिए प्रासंगिक कर सकते हैं:

<?php 
    echo dirname($_SERVER["REQUEST_URI"]); 
?> 

तो http://example.com/test/test.php प्रिंट "/ परीक्षण" या http://example.com/ प्रिंट "/" जो आप के लिए लिंक पैदा करने के लिए उपयोग कर सकते हैं वर्तमान पथ से संबंधित अन्य पृष्ठों का संदर्भ लें।

संपादित: बस फिर से पढ़ने कि आप डिस्क पर पथ के बारे में के रूप में URL पथ का विरोध करने को कह रहा हो सकता है पर एहसास हुआ।

<?php 
    echo getcwd(); 
?> 
1

अपने config.php में इस रखो (जो आपके एप्लिकेशन की जड़ dir में है): उस मामले में, आप PHP के getcwd() बजाय समारोह चाहते

$approot = substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT'])); 

मुझे लगता है कि यह करना होगा।

+0

कि करीब है टाइप करके उपयोग करें, लेकिन काफी नहीं। मुझे लगता है कि सर्वर के एलियासिंग के कारण यह गड़बड़ हो जाता है। हालांकि दिलचस्प गणित के लिए – DGM

+0

+1। :) – DGM

+0

आह, यह सच है। मुझे लगता है कि यह काम आपके सर्वर की कॉन्फ़िगरेशन पर निर्भर करता है। –

0

एक समाधान सब कुछ के लिए सापेक्ष पथ का उपयोग करना होगा, इस तरह इससे कोई फर्क नहीं पड़ता कि ऐप कहां स्थापित है। उदाहरण के लिए, अपनी शैली शीट में प्राप्त करने के लिए, इस का उपयोग करें:

../css/style.css 
+2

समस्या यह है कि यह एक टेम्पलेट में है, लेकिन संभावित रूप से विभिन्न स्तरों से बुलाया जाता है, इसलिए मुझे यह जानने की ज़रूरत है कि स्क्रिप्ट के आधार पर किस स्तर पर कॉल करना है, अन्यथा मुझे पूरा यूआरएल – DGM

0

आप फाइल सिस्टम पर पथ चाहते हैं तो आप $_SERVER['DOCUMENT_ROOT']
उपयोग कर सकते हैं तो आप सिर्फ फ़ाइल उसके बाद यूआरएल में प्रकट होता है के रास्ते चाहते हैं डोमेन उपयोग $_SERVER['REQUEST_URI']

0

मैं यह इतना बनाने के लिए एक तरह से कभी नहीं मिला है।

मैं हमेशा वेब रूट के ऊपर एक स्तर पर सर्वर पथ के साथ कॉन्फ़िगर चर को सेट अप करता हूं।फिर यह है:

  • $ configVar। रूट के अंदर सामान के लिए 'सार्वजनिक/जो भी /',
  • लेकिन आप $ configVar के बाहर से भी शामिल कर सकते हैं। 'PhpInc/db.inc.php /' आदि
0

यह मेरे लिए एक आकर्षण की तरह काम करता है, कहीं भी मैं के साथ या फिर से लिखने के नियमों के बिना तैनात,:

$ baseDir = 'http: //'। $ _SERVER ['HTTP_HOST']। (डायरनाम ($ _ सर्वर ['SCRIPT_NAME'])! = '/'? Dirname ($ _ सर्वर ["SCRIPT_NAME"])। '/': '/');

+1

चाहिए, यह करीब आता है, लेकिन यह दाढ़ी नहीं है यूआरएल से आवेदन की उपनिर्देशिका बंद करें। इसलिए यदि मैं http: //hostname/application/subfolder/test.php में हूं और इसमें एक फ़ाइल/एप्लिकेशन शामिल है जो इस चर को परिभाषित करता है, तो अभी भी यूआरएल में सबफ़ोल्डर है।मैं केवल/आवेदन – DGM

+0

यूआरएल पुनर्लेखन का प्रयास करना चाहता हूं। बस/index/में किसी index.php को सब कुछ लिखें (कुछ http संसाधनों को छोड़कर) उस index.php को सही सबफ़ोल्डर पर अग्रेषित करें। – SchizoDuckie

+0

/आवेदन में .htaccess/ RewriteEngine पर RewriteRule अपाचे में mod_rewrite सक्षम^शामिल/- [एल] [या] लागू नहीं #do/शामिल या RewriteRule^छवियों/करने के लिए - [एल] #do/छवियों RewriteRule लागू नहीं ^। * index.php अपने पथ के लिए पार्स $ _SERVER [ 'REQUEST_URI'] index.php के लिए सब कुछ #rewrite! – SchizoDuckie

1

यूआरएल जड़ से

$protocol = (strstr('https',$_SERVER['SERVER_PROTOCOL']) === false)?'http':'https'; 
$url = $protocol.'://'.$_SERVER['SERVER_NAME'].dirname($_SERVER['REQUEST_URI']); 

इस कोड को पाया जा सकता है किसी भी आवेदन का URL पथ वापसी ऑनलाइन या ऑफ़लाइन सर्वर पर किया जाएगा।

मैंने उचित '/' के लिए उचित जांच नहीं की है। कृपया इसे स्लेश के लिए संशोधित करें।

यह फ़ाइल रूट में रखी जानी चाहिए।

उदाहरण: अगर आवेदन यूआरएल:

http://localhost/test/test/test.php 

तो इस कोड को वापस आ जाएगी

http://localhost/test/test 

धन्यवाद

5

आप folowing कोड के साथ आधार यूआरएल पा सकते हैं:

define('SITE_BASE_PATH','http://'.preg_replace('/[^a-zA-Z0-9]/i','',$_SERVER['HTTP_HOST']).'/'.str_replace('\\','/',substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']))).'/'); 

लघु और सर्वोत्तम।

+0

मैं थोड़ा सा शामिल करने का सुझाव दूंगा "।" उसके बाद ".... 0-9" यदि आप इसे आईपी पते पर भी काम करना चाहते हैं। ----> 'परिभाषित ('SITE_BASE_PATH', 'http: //'.preg_replace ('/[^ a-zA-Z0-9।]/I ',', $ _ सर्वर [ 'HTTP_HOST'])। '/'.str_replace('\\','/',substr(dirname(__FILE__),strlen($_SERVER['DOCUMENT_ROOT']))).'/'); ' –

+0

क्यों 'str_replace (" \\ "' ?? – TCB13

0

यही वह है जो मैंने अपने ऐप में उपयोग किया है जो ठीक काम करता है, मैं कस्टम पोर्ट का भी उपयोग करता हूं इसलिए मुझे इसके लिए भी अनुमति देना पड़ा।

define('DOC_URL', ($_SERVER['HTTPS']=='on'?'https':'http').'://'.$_SERVER['SERVER_NAME'].(!in_array($_SERVER['SERVER_PORT'], array(80,443))?':'.$_SERVER['SERVER_PORT']:'')).dirname($_SERVER['REQUEST_URI']); 

तो मैं इसे निम्न ...

<img src="<?php echo DOC_URL; ?>/_img/logo.png" /> 
संबंधित मुद्दे