975 Stimmen

Abrufen der vollständigen URL in PHP

Ich verwende diesen Code, um die vollständige URL zu erhalten:

$actual_link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

Das Problem ist, dass ich einige Masken in meinem .htaccess Daher ist der in der URL angegebene Pfad nicht immer der tatsächliche Pfad der Datei.

Was ich brauche, ist die URL, das, was in der URL steht, nicht mehr und nicht weniger - die vollständige URL.

Ich muss wissen, wie die Datei in der Navigationsleiste des Webbrowsers angezeigt wird, und nicht den tatsächlichen Pfad der Datei auf dem Server.

0 Stimmen

Schauen Sie sich doch einfach mal das gesamte Array mit print_r($_SERVER) Dort finden Sie alles, was Sie brauchen :)

24 Stimmen

@Brade Die URL-Leiste befindet sich auf dem Browser des Benutzers, warum sollte PHP also irgendwelche Funktionalitäten diesbezüglich haben? PHP ist serverseitig.

33 Stimmen

@eis Glauben Sie mir, es gibt viele Gründe, dies zu wollen. Landingpages, die dieselbe Vorlage verwenden, aber separat verfolgt werden müssen, usw. Und Tatsache ist, dass PHP (oder jede andere serverseitige Sprache) alle verschiedenen Teile der URL zurückgeben kann, aber niemals das Ganze in einem String bereitstellen kann. Das erscheint einfach dumm.

12voto

OzzyCzech Punkte 8588

Hier ist meine Lösung - der Code ist inspiriert von Tracy-Debugger . Sie wurde geändert, um verschiedene Server-Ports zu unterstützen. Sie können die vollständige aktuelle URL erhalten, einschließlich $_SERVER['REQUEST_URI'] oder nur die grundlegende Server-URL. Prüfen Sie meine Funktion:

function getCurrentUrl($full = true) {
    if (isset($_SERVER['REQUEST_URI'])) {
        $parse = parse_url(
            (isset($_SERVER['HTTPS']) && strcasecmp($_SERVER['HTTPS'], 'off') ? 'https://' : 'http://') .
            (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : (isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : '')) . (($full) ? $_SERVER['REQUEST_URI'] : null)
        );
        $parse['port'] = $_SERVER["SERVER_PORT"]; // Setup protocol for sure (80 is default)
        return http_build_url('', $parse);
    }
}

Hier ist der Testcode:

// Follow $_SERVER variables was set only for test
$_SERVER['HTTPS'] = 'off'; // on
$_SERVER['SERVER_PORT'] = '9999'; // Setup
$_SERVER['HTTP_HOST'] = 'some.crazy.server.5.name:8088'; // Port is optional there
$_SERVER['REQUEST_URI'] = '/150/tail/single/normal?get=param';

echo getCurrentUrl();
// http://some.crazy.server.5.name:9999/150/tail/single/normal?get=param

echo getCurrentUrl(false);
// http://some.crazy.server.5.name:9999/

8voto

Web-Developer-Nil Punkte 111

Ich habe diese Funktion erstellt, um die URL zu verarbeiten:

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

8voto

Amarjit Punkte 301

Dies ist mit den Apache-Umgebungsvariablen recht einfach zu bewerkstelligen. Dies funktioniert nur mit Apache 2, von dem ich annehme, dass Sie ihn verwenden.

Verwenden Sie einfach den folgenden PHP-Code:

<?php
    $request_url = apache_getenv("HTTP_HOST") . apache_getenv("REQUEST_URI");
    echo $request_url;
?>

7voto

Vaibhav Jain Punkte 463

Dies ist die Lösung für Ihr Problem:

//Fetch page URL by this

$url = $_SERVER['REQUEST_URI'];
echo "$url<br />";

//It will print
//fetch host by this

$host=$_SERVER['HTTP_HOST'];
echo "$host<br />";

//You can fetch the full URL by this

$fullurl = "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
echo $fullurl;

6voto

Luke Mlsna Punkte 458

Sie können verwenden http_build_url ohne Argumente, um die vollständige URL der aktuellen Seite:

$url = http_build_url();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X