it-swarm.com.de

PHP Wie bekomme ich die Basis Domain/URL?

function url(){
    if(isset($_SERVER['HTTPS'])){
        $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
    }
    else{
        $protocol = 'http';
    }
    return $protocol . "://" . $_SERVER['HTTP_Host'];
}

Zum Beispiel mit der Funktion oben funktioniert es gut, wenn ich mit demselben Verzeichnis arbeite, aber wenn ich ein Unterverzeichnis mache und darin arbeite, wird mir zum Beispiel auch der Ort des Unterverzeichnisses angezeigt. Ich möchte nur example.com, aber es gibt mir example.com/sub, wenn ich im Ordner sub arbeite. Wenn ich das Hauptverzeichnis verwende, funktioniert die Funktion gut. Gibt es eine Alternative zu $_SERVER['HTTP_Host']?

Oder wie könnte ich meine Funktion/meinen Code korrigieren, um nur die Haupt-URL zu erhalten? Vielen Dank.

34
ZZPLKF

Verwenden Sie SERVER_NAME.

echo $_SERVER['SERVER_NAME']; //Outputs www.example.com
67
Bad Wolf

Sie können die parse_url()-Funktion von PHP verwenden

function url($url) {
  $result = parse_url($url);
  return $result['scheme']."://".$result['Host'];
}
33
user1864610
/**
 * Suppose, you are browsing in your localhost 
 * http://localhost/myproject/index.php?id=8
 */
function getBaseUrl() 
{
    // output: /myproject/index.php
    $currentPath = $_SERVER['PHP_SELF']; 

    // output: Array ( [dirname] => /myproject [basename] => index.php [extension] => php [filename] => index ) 
    $pathInfo = pathinfo($currentPath); 

    // output: localhost
    $hostName = $_SERVER['HTTP_Host']; 

    // output: http://
    $protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'?'https':'http';

    // return: http://localhost/myproject/
    return $protocol.'://'.$hostName.$pathInfo['dirname']."/";
}
16
Jasmeen

Kürzeste Lösung:

$domain = parse_url('http://google.com', PHP_URL_Host);
16
barbushin

Verwenden Sie parse_url() wie folgt:

function url(){
    if(isset($_SERVER['HTTPS'])){
        $protocol = ($_SERVER['HTTPS'] && $_SERVER['HTTPS'] != "off") ? "https" : "http";
    }
    else{
        $protocol = 'http';
    }
    return $protocol . "://" . parse_url($_SERVER['REQUEST_URI'], PHP_URL_Host);
}

Hier ist eine weitere kürzere Option:

function url(){
    $pu = parse_url($_SERVER['REQUEST_URI']);
    return $pu["scheme"] . "://" . $pu["Host"];
}
10
Get Off My Lawn

Schritt 1

Trimmen Sie zuerst den nachfolgenden Backslash (/) von der URL. Beispiel: Wenn die URL http://www.google.com/ lautet, lautet die resultierende URL http://www.google.com .

$url= trim($url, '/');

Schritt 2

Wenn das Schema nicht in der URL enthalten ist, voranstellen. Wenn beispielsweise die URL www.google.com lautet, lautet die resultierende URL http://www.google.com

if (!preg_match('#^http(s)?://#', $url)) {
    $url = 'http://' . $url;
}

Schritt 3

Holen Sie sich die Teile der URL. 

$urlParts = parse_url($url);

Schritt 4

Jetzt entfernen Sie www. von der URL

$domain = preg_replace('/^www\./', '', $urlParts['Host']);

Ihre endgültige Domäne ohne http und www wird jetzt in der $ domain-Variable gespeichert.

Beispiele:

http://www.google.com => google.com

https://www.google.com => google.com

www.google.com => google.com

http://google.com => google.com

3

2 Zeilen, um es zu lösen

$actual_link = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_Host]$_SERVER[REQUEST_URI]";
$myDomain = preg_replace('/^www\./', '', parse_url($actual_link, PHP_URL_Host));
1
Fadi

Bitte versuchen Sie das:

$uri = $_SERVER['REQUEST_URI']; // $uri == example.com/sub
$exploded_uri = explode('/', $uri); //$exploded_uri == array('example.com','sub')
$domain_name = $exploded_uri[1]; //$domain_name = 'example.com'

Ich hoffe, dies wird dir helfen.

0
Charles