2010-08-30 15 views
18

Ich dachte, das wäre einfach, aber ich kann nicht scheinen, eine Variable $_SERVER Array zu finden, die, was ich gesucht habe.Ich versuche, eine vollständige URL ohne Dateinamen in PHP

Angenommen, meine URL ist http://example.com/subdirectory/index.php Ich möchte alle außer dem Dateinamen - http://example.com/subdirectory/ bekommen.

Ich weiß, ich könnte dies leicht mit einigen String-Manipulation tun, aber ich möchte wissen, ob es eine Var der _server Array, die ich gerade vermisse. Ich habe versucht, alle zu sehen, was sie geben und ich kann alles bekommen, ABER was ich suche.

+0

Sehr gute Frage. Danke –

+0

möglich Duplikat von [Holen Sie sich die vollständige URL in PHP] (http://stackoverflow.com/questions/6768793/get-the-full-url-in-php) –

Antwort

36

Es wird keine geben, weil es kein nützliches Attribut zum Nachverfolgen ist. Wenn das aktuelle Skript etwas anderes als index.* ist, wird es nicht die korrekte URL für das aktuelle Skript zurückgeben.

Doch dies könnte Sie bekommen, was Sie wollen:

echo '//'.$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF']); 

Edit:
Auch abgesehen von den php.net Online-Handbuch Suchwerkzeug für Firefox zu installieren und es mit einem Suchbegriff Einstellung (die Sie in die Dokumentation zum $_SERVER global nach oben ziehen lassen durch so etwas wie „php $_server“ in der URL-Leiste eingeben), Sie sollen auch wissen, dass var_dump() und print_r() können Sie die Ausgabe den kompletten Inhalt einer variablen, einschließlich Arrays und Objekte. Dies ist sehr nützlich für das Debugging.

+0

Aber beachten Sie, dass Sie nicht übernehmen sollten, dass dirname () entspricht dem URL-Pfad. – JackFuchs

+0

In meinem Fall funktioniert es nicht, erhalten Sie eine URL wie 'http: // magento.p111111.webspaceconfig.de/magento.p111111.webspaceconfig.de /' –

+0

@Stefan: Sie könnten '$ _SERVER ['REQUEST_URI' versuchen ] wie JackFuchs schrieb. Vielleicht verwenden Sie eine Form des URL-Rewriting, bei der Docroot eine Ebene höher angegeben hat als von wo aus Ihr wwwroot geliefert wird. Lassen Sie mich wissen, ob das für Sie funktioniert. –

2

können Sie dirname() verwenden, um den Pfad einer URL zu erhalten.

3

Ich kann nicht scheinen, eine Variable von $ _SERVER Array zu finden, die hat, was ich suche.

weil es eine fiktive Zeichenfolge ist, die nur in der Adressleiste des Browsers existiert.
Es werden Teile getrennt zum Server gesendet.

Ich möchte wissen, ob es eine var des Arrays _server ist

, die sehr einfach zu wissen. nur print_r($_SERVER); wirklich einfach.

Ich weiß, ich könnte ganz einfach dies mit einem gewissen String-Manipulation

ja. Der Code, den Sie schreiben müssen, ist kleiner als dieser Fragetext.

aber mit manueller Magie kann es auf nur eine Funktion reduziert werden.

8

Es gibt keine definierten Variablen für das, was Sie wollen.

können Sie den Code verwenden, unten die volle Basis-URL zu erhalten:

// Base folder url 
$myBase = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on')) ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']); 

aber hoffentlich die meiste Zeit werden Sie nicht die volle Sache benötigen benutzen Sie einfach:

// Base folder server root path 
$myBase = dirname($_SERVER['PHP_SELF']); 

Nur vorsichtig sein, wenn Sie verwenden eine Art von Routen-System (mod_rewrite).

14

In Ihrem Fall ist die String-Manipulation die beste Lösung.

Beispiel:

substr($_SERVER['REQUEST_URI'], 0, strrpos($_SERVER['REQUEST_URI'], '/') + 1); 
+0

Oder substr ($ _ SERVER ['REQUEST_URI'], 0, strrpos ($ _ SERVER ['REQUEST_URI'], '\\') + 1); auf einem Windows-Server – Vincent

+1

Ich glaube nicht, Vincent. Da wir hier einen URI manipulieren, KEIN Windows-Dateipfad! –

Verwandte Themen