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.
12 Stimmen
Das Ganze wird nie an die Serverseite gesendet, da es keine Rolle spielen sollte, weshalb es auch nirgendwo leicht verfügbar ist. Ich würde jede Funktionalität, die sich darauf verlässt, als kaputt ansehen. Aber das ist nur meine Meinung.
3 Stimmen
Das in der Frage ausgedrückte Bedürfnis (vollständige URL, wie in der Adressleiste) stellt das eigentliche Problem in den Schatten: Wenn man zufällig die "Selbst-URL" einer Seite auf dem Server benötigt (aus welchem Grund auch immer, z. B. zum Ausfüllen von FORM-Aktions-URLs), wäre es sicherlich besser, sie vom Server zu erhalten (z. B. $_SERVER), als zu versuchen, sie aus Bits und Stücken auf willkürliche, gefälschte Art und Weise zusammenzusetzen (wie häufig zu beobachten). Diese URL wäre zumindest korrekt, wenn auch nur eine "effektive URL", nicht unbedingt die exakte Kopie der Adressleiste (die in der Tat außerhalb der Reichweite des Servers liegt).
5 Stimmen
Mein obiges Beispiel für den Bedarf an einer eigenen URL: "Füllen von FORM-Aktions-URLs" ist vielleicht falsch, da PHP_SELF (nur Pfad, ohne Domain usw.) dafür ausreichen sollte. Aber das bedeutet nicht unbedingt, dass alle anderen Anforderungen an die kanonische Selbst-URL ungültig sind. Wenn dies tatsächlich der Fall ist, wäre es toll, eine ausführliche Erklärung zu sehen, warum.
0 Stimmen
@lunakid es ist oft praktisch, die aktuelle URL zu nehmen, sie zu analysieren und einige weitere Parameter hinzuzufügen, es wäre besser, wenn das System in der Lage wäre, eine kanonische URL für jede Seite selbst zu erzeugen, aber das ist oft lächerlich schwer zu erreichen.
0 Stimmen
Ich verstehe nicht, warum man den vollständigen Pfad nicht in der Konfigurationsdatei selbst fest eintippen kann? Darauf wird überall in den Anwendungen zugegriffen, und es gibt dort auch andere fest kodierte Dinge, wie z.B. db name, user und pass. Warum sollte man Rechenleistung verschwenden, um den vollständigen Pfad herauszufinden, der leicht gefälscht werden kann, indem man einen anderen HTTP_HOST sendet?
4 Stimmen
Einer der Gründe, warum Sie Ihre URL in der Konfiguration nicht fest codieren sollten, ist, dass Sie verschiedene Plattformen haben, auf denen Ihr Projekt installiert werden soll (Dev, Integration, Production). Jede dieser Plattformen hat ihre eigene URL, und Sie möchten Ihren Code nicht ändern, je nachdem, auf welchem Server Ihr Projekt installiert ist.
0 Stimmen
Eine einfachere Lösung könnte hoffentlich mit PHP 7.2+ (vorgeschlagene Version) kommen wiki.php.net/rfc/replace_parse_url
0 Stimmen
@KaiNoack Wie würde ein Ersatz für
parse_url(url)
das Problem lösen, zuerst die Url zu erhalten?