Pia: file_get_contents auf sich selbst referenzieren

Hi,

seltsame Sache. Wollte file_get_contents auf sich selbst
referenzieren und dadurch auslesen, aber dann bekomme ich
die Fehlermeldung, dass die Datei nicht existieren würde.

Im Detail:

$basis = file_get_contents($_SERVER['PHP_SELF']);
echo $basis;

Ergebnis: Fehlermeldung

Dann mal zum testen so probiert:

$basis = file_get_contents('test.php');
echo $basis;

Ergebnis: Funktioniert tadelos

Auch mal so getestet:
$basis = '<a href="'.$_SERVER['PHP_SELF'].'">'.$_SERVER['PHP_SELF'].'</a>';
echo $basis;

Ergebnis: Funktioniert ebenso

Also warum sagt mir PHP, die Datei würde nicht existieren?
Ein Bug, oder Fehler bei mir?

carpe noctem
Pia

  1. Hallo Pia.

    seltsame Sache. Wollte file_get_contents auf sich selbst
    referenzieren und dadurch auslesen, aber dann bekomme ich
    die Fehlermeldung, dass die Datei nicht existieren würde.

    Im Detail:

    $basis = file_get_contents($_SERVER['PHP_SELF']);
    echo $basis;

    Ergebnis: Fehlermeldung

    Das Problem hierbei ist, dass der Wert von $_SERVER['PHP_SELF'] stets mit einem Slash beginnt. Damit würde PHP also versuchen, das Script innerhalb des Wurzelverzeichnisses des Systems zu finden. Dort kann es aber logischerweise nicht gefunden werden.

    Verwende also besser $_SERVER['SCRIPT_FILENAME'].

    Einen schönen Freitag noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Danke Mathias,

      Das Problem hierbei ist, dass der Wert von $_SERVER['PHP_SELF'] stets mit einem Slash beginnt. Damit würde PHP also versuchen, das Script innerhalb des Wurzelverzeichnisses des Systems zu finden. Dort kann es aber logischerweise nicht gefunden werden.

      wenn ich das richtig verstehe, ist $_SERVER['PHP_SELF'] nur bei
      Verweisen zu gebrauchen also Formularen, Links usw., weil
      ein Browser auch mit dem vorgestellten Slash umgehen kann?

      carpe noctem
      Pia

      1. Hallo Pia.

        Das Problem hierbei ist, dass der Wert von $_SERVER['PHP_SELF'] stets mit einem Slash beginnt. Damit würde PHP also versuchen, das Script innerhalb des Wurzelverzeichnisses des Systems zu finden. Dort kann es aber logischerweise nicht gefunden werden.

        wenn ich das richtig verstehe, ist $_SERVER['PHP_SELF'] nur bei
        Verweisen zu gebrauchen also Formularen, Links usw., weil
        ein Browser auch mit dem vorgestellten Slash umgehen kann?

        Die Feststellung stimmt, die Begründung jedoch nicht (ganz). Da PHP auf Dateisystemebene agiert, entspricht „/“ besagtem Wurzelverzeichnis.

        Auf der Webserverebene, entspricht „/“ jedoch dem Wurzelverzeichnis des Hosts. Notiert man nun also einen Link oder ein Formularziel unterhalb von „/“, bezieht sich dies auf besagtes Verzeichnis.

        (Natürlich können Browser mit vorangestellten Slashs umgehen; sie setzen die anzufragende Adresse dann entsprechend zusammen.)

        Einen schönen Freitag noch.

        Gruß, Mathias

        --
        ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
        debian/rules
      2. Hi!

        wenn ich das richtig verstehe, ist $_SERVER['PHP_SELF'] nur bei
        Verweisen zu gebrauchen also Formularen, Links usw., weil
        ein Browser auch mit dem vorgestellten Slash umgehen kann?

        Aus dem PHP-Handbuch (http://www.php.net/manual/de/reserved.variables.php):

        'PHP_SELF'
        Der Name des aktuell ausgeführten Skripts, relativ zum Wurzelverzeichnis des Servers. Zum Beispiel gibt $_SERVER['PHP_SELF'] in einem Skript mit der Adresse http://example.com/test.php/foo.bar den Namen /test.php/foo.bar zurück.
        Falls PHP auf der Kommandozeile ausgeführt wird, ist diese Variable nicht verfügbar.

        Schöner Gruß,
        rob