2010-02-10 8 views
8

मैं इस पृष्ठ पर काम कर रहा हूँ के पूर्ण URL हो रही है। पूर्ण यूआरएल स्थान को पकड़ने के लिए मुझे क्या उपयोग करना चाहिए? थोड़ा लंबा और गंदेवर्तमान पृष्ठ (PHP)

function curPageURL() { 
$pageURL = 'http'; 
if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} 
$pageURL .= "://"; 
if ($_SERVER["SERVER_PORT"] != "80") { 
    $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; 
} else { 
    $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; 
} 
return $pageURL; 
} 

उत्तर

11
function selfURL() 
{ 
    $s = empty($_SERVER["HTTPS"]) ? '' : ($_SERVER["HTTPS"] == "on") ? "s" : ""; 
    $protocol = strleft(strtolower($_SERVER["SERVER_PROTOCOL"]), "/").$s; 
    $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":".$_SERVER["SERVER_PORT"]); 
    return $protocol."://".$_SERVER['SERVER_NAME'].$port.$_SERVER['REQUEST_URI']; 
} 

function strleft($s1, $s2) { return substr($s1, 0, strpos($s1, $s2)); } 
+4

लगता पाया: कम से कम हाल में http://dev.kanngard.net/Permalinks/ID_20050507183447.html –

+3

'strleft' मौजूद नहीं है (PHP के संस्करण)। – pr1001

+0

pr1001 - स्ट्रैप php में फ़ंक्शन में नहीं बनाया गया है, लेकिन फ़ंक्शन – user8455694

8

वहाँ के रूप में तक मुझे पता है एक देशी तरीका नहीं है, लेकिन आप इस इस्तेमाल कर सकते हैं

function absolutizeUrl ($u, $p) 
{ 
    $url = parse_url($u); 
    $page = parse_url($p); 

    if (strpos($u , '/') === 0) 
    { 
      //already absolute    
    } else { 
      $basePath = ''; 
      if (
        isset($page[ 'path' ]) 
        && strpos(ltrim($page[ 'path' ], '/'), '/') 
      ) 
      { 
        $baseTokens = explode('/', $page[ 'path' ]); 
        array_pop($baseTokens); // strip basename      
        $baseTokens[] = $u; 
        $u = join('/', $baseTokens); 
      } 
    } 
    if (! isset($url[ 'host' ])) 
    { 
      $u = 'http://'.$page[ 'host' ].'/'.ltrim($u, '/'); 
    } 
    return $u; 
    } 
+0

पर हमला किया गया यह अच्छा हो सकता है यदि आप प्रोटोकॉल को जानने के लिए '$ _SERVER ["SERVER_PROTOCOL"]' भी चेक करते हैं। – PhoneixS

+0

@PhoneixS मान लीजिए कि यह "HTTP/1.1" है ... मैं इसके साथ क्या करूँ? – Michael

+0

@ माइकल आप जानते हैं कि प्रोटोकॉल http है ताकि आप यूआरएल में http जोड़ सकें। इस जवाब में आपने माना है कि सभी अनुरोध http हैं लेकिन फ़ाइलों को सेवा देने के लिए अन्य प्रोटोकॉल होना संभव है (उदाहरण के लिए mod_ftp के साथ एक अपाचे सर्वर में मुझे लगता है कि यह ftp हो सकता है)। – PhoneixS

1

जांच इस एक ... लेकिन अच्छा काम करता है ...:

2

आप चर एक यूआरएल है कि आप एक लिंक ट्रैकिंग स्क्रिप्ट के माध्यम से गुजर रहे हैं के अंत पर वापस जोड़ने के लिए, उदाहरण के लिए कोशिश कर रहे हैं, तो आप इस कोशिश कर सकते:

$URI = array(); 
foreach($_GET as $key=>$val) 
{ 
    if ($key!="link"&&$key!="id"&&$key!="type") $URI[] = "$key=".urlencode($val); 
} 
if (sizeof($URI)>0) $link.="&".join("&",$URI); 

इस मामले में, "लिंक", "आईडी" और "टाइप" ट्रैकिंग के लिए आवश्यक चर थे, लेकिन जिस URL को मैं ट्रैक करना चाहता था उसके अंत में एक चर था जो मेरे द्वारा छीन लिया गया था लिपि जैसे कि यह उस प्रश्न को भेजा जा रहा था; मुझे हेडर को पास करने से पहले इसे लिंक यूआरएल में जोड़ना होगा ("स्थान:"। $ लिंक)।

यदि आप यही काम करने की कोशिश कर रहे हैं तो यह महान काम करता है और उपर्युक्त उदाहरण से छोटा है।

1

मैं इस कोड बहुत उपयोगी है कि साइट से आ

$protocol = strpos(strtolower($_SERVER['SERVER_PROTOCOL']),'https') === 
FALSE ? 'http' : 'https';   // Get protocol HTTP/HTTPS 
$host  = $_SERVER['HTTP_HOST']; // Get www.domain.com 
$script = $_SERVER['SCRIPT_NAME']; // Get folder/file.php 
$params = $_SERVER['QUERY_STRING'];// Get Parameters occupation=odesk&name=ashik 

$currentUrl = $protocol . '://' . $host . $script . '?' . $params; // Adding all 

echo $currentUrl; 
+1

प्रतीक्षा करें ... $ _SERVER ['SERVER_PROTOCOL'] == "HTTP/1.1" https का उपयोग करते समय भी! – Michael

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