2010-02-10 7 views
8

Ich bin auf dieser Seite arbeiten: http://localhost/projectname/custom.phpgibt es die vollständige URL der aktuellen Seite (PHP)

Beide <?php echo $_SERVER['REQUEST_URI']; ?> und <?php echo $PHP_SELF; ?> nicht voll Lage geben. Was sollte ich verwenden, um den vollständigen URL-Standort zu finden?

Antwort

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

scheint von dieser Seite kommen: http://dev.kanngard.net/Permalinks/ID_20050507183447.html –

+3

'strleft' existiert nicht (zumindest in den letzten Versionen von PHP). – pr1001

+0

pr1001 - strleft ist nicht in Funktion in PHP eingebaut, aber usermode Funktion – user8455694

8

Es gibt keine native Methode, soweit ich weiß, aber Sie könnten so:

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; 
} 
+0

Es könnte gut sein, wenn Sie auch '$ _SERVER [" SERVER_PROTOCOL "]' überprüfen, um das Protokoll zu kennen. – PhoneixS

+0

@PhoneixS Angenommen es ist "HTTP/1.1" ... was mache ich damit? – Michael

+0

@Michael Sie wissen, dass das Protokoll http ist, so dass Sie http zu der URL hinzufügen können. In dieser Antwort haben Sie angenommen, dass alle Anfragen http sind, aber es ist möglich, andere Protokolle zu haben, um die Dateien zu bedienen (zum Beispiel in einem Apache-Server mit mod_ftp ich denke, dass es ftp sein kann). – PhoneixS

1

Prüfung dieses ... ein bisschen lang und schmutzig, aber funktioniert gut ...

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; 
    } 
2

Wenn Sie versuchen, Variablen an das Ende einer URL hinzufügen zurück, die Sie über einen Link Tracking-Skript sind vorbei, zum Beispiel, könnten Sie dies versuchen:

$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); 

In diesem Fall waren "link", "id" und "type" die Variablen, die ich für das Tracking benötigte, aber die URL, die ich verfolgen wollte, hatte eine Variable am Ende, die von meinem entfernt wurde Skript als ob es Teil der Abfrage war, die an es gesendet wurde; Ich brauchte den Link zurück zur Link-URL, bevor ich ihn an den Header ("Location:". $ Link) weitergab.

Wenn dies ist, was Sie versuchen zu erreichen, funktioniert das großartig und ist kürzer als oben Beispiel.

1

ich diesen Code gefunden sehr hilfreich

$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

warten ... $ _SERVER ['SERVER_PROTOCOL'] == "HTTP/1.1" auch bei Verwendung von https! – Michael

Verwandte Themen