2012-06-28 44 views
3

可能重複:
How to get full URL on the address bar using PHP如何使用PHP從地址欄中檢索完整的URL?

我使用這個功能,但它不工作的所有時間。任何人都可以提供一個提示嗎?

function sofa_get_uri() { 
    $host = $_SERVER['SERVER_NAME']; 
    $self = $_SERVER["REQUEST_URI"]; 
    $query = !empty($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : null; 
    $ref = !empty($query) ? "http://$host$self?$query" : "http://$host$self"; 
    return $ref; 
} 

我想檢索地址欄中的鏈接(正好),以便在登出時使用它來引用用戶。該網址是不同的:

http://domain.com/sample/address/?arg=bla 

http://domain.com/?show=bla&act=bla&view=bla 

http://domain.com/nice/permalinks/setup 

但我不能得到一個函數,適用於所有情況下,並給我真正的引薦。

提示請。

回答

14

這個怎麼樣?

function getAddress() { 
    $protocol = $_SERVER['HTTPS'] == 'on' ? 'https' : 'http'; 
    return $protocol.'://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 
} 

echo getAddress(); 
+1

'$ protocol'中的條件語句應該是'isset($ _ SERVER ['HTTPS'])=== true'。 –

+0

請注意:這是快速而骯髒的解決方案,但大部分時間都適用。這種方法包含了一些值得考慮的事情。 HTTPS和HTTP_HOST不是標準的,可以省略或錯誤配置。 HTTP_HOST可能爲空或包含任何字符串數據(+可能是使用請求頭中的主機「被客戶端破解」)。最佳做法是使用多個檢查(SERVER_PROTOCOL和REQUEST_SCHEME以及HTTPS; SERVER_NAME比HTTP_HOST更可靠,但也可能被錯誤配置)。底線,這個功能大部分時間工作,但它不是通用和可靠的解決方案。 – Wh1T3h4Ck5

-1

你可以使用上面的函數來檢索URL直到GET參數。 所以你有像='localhost/site/tmp'(例子)的字符串。 之後,你可以通過GET參數循環,如果不能得到任何其他的工作。 添加'?'手動結束字符串。

$str = 'localhost/site/tmp/?' 
foreach ($_GET as $key => $value) { 
    $str .= $key.'='.$value.'&'; 
} 
substr_replace($str, "", -1); 

echo $ str; 最後您刪除了'&'且不需要的最後一個符號。

+0

此代碼是否正常工作? –

+0

將您的代碼輸出到本地主機/站點/ tmp /? –

+0

我想,它必須正常工作,雖然我還沒有嘗試過。輸出將是:localhost/site/tmp /?get1 = val1&get2 = val2。 $ str必須從$ _SERVER的一個主函數中獲取。所有GET參數將被添加。 – dpitkevics