Hallo Robert,
nur, wenn der Pfad zur Datei im Filesystem des Servers wissen möchte.
Wenn man den Pfad zum Script in der URL wissen möchte, über die das Script aufgerufen wurde, muss man auf die Einträge in $_SERVER zugreifen. Diese sind zwar in RFC 3275 standardisiert, aber zumindest unser Wiki vertraut dem nicht.
Ob dieses Misstrauen gegenüber den CGI-Metas aus RFC3275 gerechtfertigt ist, weiß ich nicht. Ich weiß jedenfalls, dass es einige Unterschiede in den $_SERVER-Einträgen gibt, je nachdem, welche Webserver-Software zum Einsatz kommt.
Ein weiterer Aspekt, den man beachten muss, sind URL-Rewrites. Wenn der Anwender https://example.com/foo/bar/dings.php
abruft und der Apache daraus per mod_rewrite ein /muh/bums.php
macht, dann muss man schon gut überlegen, ob einem das weiterhilft. Ich habe hier und jetzt keinen Überblick über die Einträge, die der Apache macht und in welchen Szenarien sie was enthalten. Unser Wiki leider auch nicht. Ich weiß auch nicht, ob alle Apaches ein gemeinsames Basisset von $_SERVER-Einträgen bereitstellen oder ob das wiederum an der Version oder an aktivierten Modulen hängt.
TL;DR: $_SERVER['SCRIPT_NAME'] ist ein in RFC3275 genannter Eintrag und sollte für https://example.com/foo/bar/dings.php den String "foo/bar/dings.php" enthalten (kein / am Anfang). Wenn man darauf dann dirname() anwendet, bekommt man den Pfad.
Meine Empfehlung wäre jedenfalls, sich den tatsächlichen Inhalt von $_SERVER['SCRIPT_NAME'] anzeigen zu lassen, bevor man anfängt, damit herumzumachen.
Wenn Rewrites im Spiel sind, bekommt man die URL vor dem Rewrite mit $_SERVER['REQUEST_URI']
. Diese URL zerlegt man mit parse_url in ihre Bestandteile und findet im Ergebnis unter dem Schlüssel 'path' das Gewünschte.
Rolf
sumpsi - posui - obstruxi