Onizuka: $PHP_SELF macht was genau?

Abend

Ich dachte immer, dass $PHP_SELF den eigenen Dateinamen ausgibt.

Wenn ich jetzt aber eine Datei 'test1.php' und per include() 'test2.php' einbinde, bekomme ich, wenn ich in 'test2.php' mir $PHP_SELF ausgeben lasse, 'test1.php' zurückgeliefert.

Eigentlich ist mir das nur recht so, da ich es genau so brauchen kann. Da ich allerdings erwartet hatte, dass 'test2.php' ausgegeben wird, wollte ich fragen, ob das bei PHP generell so funktioniert, dass immer der Name der höheren PHP Datei ausgegeben wird, oder ob das Server- und php.ini-spezifisch bedingt ist.

Ich habe in der Doku auf php.net nachgesehen, ob ich was zu $PHP_SELF finde, aber leider ist die Doku so riesig, dass ich keine Ahnung hab wonach ich eigentlich suchen soll. Wie nennt man Variablen wie $PHP_SELF überhaupt?

Danke für eure Hilfe, Onizuka

  1. Moin!

    Ich dachte immer, dass $PHP_SELF den eigenen Dateinamen ausgibt.

    Falsch gedacht.

    Wenn ich jetzt aber eine Datei 'test1.php' und per include() 'test2.php' einbinde, bekomme ich, wenn ich in 'test2.php' mir $PHP_SELF ausgeben lasse, 'test1.php' zurückgeliefert.

    Logisch. $PHP_SELF bzw. genauer $_SERVER['PHP_SELF'] ist eine vom Server (deswegen steht sie in $_SERVER) gesetzte Variable, die den vom Browser aufgerufenen Skriptnamen enthält. Ähnliche Informationen findest du z.B. in $_SERVER['SCRIPT_NAME'], $_SERVER['SCRIPT_URL'] und $_SERVER['REQUEST_URI'] - je nach tatsächlicher Konfiguration des Servers.

    Und da beim Includen die einmal gesetzten Informationen nicht geändert werden, sondern lediglich der Quelltext der zweiten Datei dem der ersten Datei hinzugefügt wird, ist das Verhalten absolut korrekt.

    PHP_SELF ist gut für sich selbst aufrufende Formulare geeignet, oder für auf sich selbst zeigende Links - ändert man den Skriptnamen, ändern sich auch die Formularziele und Links automatisch mit.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
    1. Vielen Dank für eure Antworten, das hat mir geholfen.

      Aber auch eine neue Frage aufgeworfen:

      In der Doku steht, dass $_SERVER erst ab PHP 4.1.0 verfügbar ist, davor soll man $HTTP_SERVER_VARS verwenden.
      Mein Script sollte aber zumindest auf PHP 4.x laufen. Muss ich jetzt jedes mal eine Abfrage machen welche PHP Version benutzt wird und dann die jeweils richtige Variable ausgeben?

      Das ist doch extremst umständlich. Gibts da einen leichteren Weg?

      1. Moin!

        In der Doku steht, dass $_SERVER erst ab PHP 4.1.0 verfügbar ist, davor soll man $HTTP_SERVER_VARS verwenden.
        Mein Script sollte aber zumindest auf PHP 4.x laufen. Muss ich jetzt jedes mal eine Abfrage machen welche PHP Version benutzt wird und dann die jeweils richtige Variable ausgeben?

        Das ist doch extremst umständlich. Gibts da einen leichteren Weg?

        Nein. Du wirst PHP 4.0.x sowieso (bzw. _hoffentlich_) kaum noch antreffen. Versionen kleiner als 4.0.6 hoffentlich sowieso nicht (die hatten allen mindestens eine böse Sicherheitslücke), und ab 4.1.0 funktioniert's ja.

        Und so eine krasse Umstellung der Anforderungen ist es ja nun auch nicht. Du wolltest eigentlich ab PHP 4.0.x - mach 4.1.x draus. Du bietest das Skript ja schließlich auch nicht für PHP 3 oder PHP 2 an.

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
        1. Also wenn ihr hier so fortschrittlich seid, muss es ja wohl stimmen.
          Also 4.1.x :)

          Danke!

  2. Hi!

    Ich dachte immer, dass $PHP_SELF den eigenen Dateinamen ausgibt.

    Wenn ich jetzt aber eine Datei 'test1.php' und per include() 'test2.php' einbinde, bekomme ich, wenn ich in 'test2.php' mir $PHP_SELF ausgeben lasse, 'test1.php' zurückgeliefert.

    Eigentlich ist mir das nur recht so, da ich es genau so brauchen kann. Da ich allerdings erwartet hatte, dass 'test2.php' ausgegeben wird, wollte ich fragen, ob das bei PHP generell so funktioniert, dass immer der Name der höheren PHP Datei ausgegeben wird, oder ob das Server- und php.ini-spezifisch bedingt ist.

    Siehe Link

    Ich habe in der Doku auf php.net nachgesehen, ob ich was zu $PHP_SELF finde, aber leider ist die Doku so riesig, dass ich keine Ahnung hab wonach ich eigentlich suchen soll. Wie nennt man Variablen wie $PHP_SELF überhaupt?

    "Vordiefinierte Variablen", im Manual zu finden über

    II. Sprachreferenz -> 8. Variablen -> Vordefinierte Variablen

    Das ist die deutsche Version, die von mir verlinkte Seite gibt es noch nicht in deutsch, ist aufgrund einiger Änderungen in PHP daher der deutschen vorzuziehen.

    Grüße
    Andreas