Paul Brunner: file_exists

Hallo,

seit einem php update auf unserem Server (Schlund) von 4.1.1 auf 4.2.3 funktionieren eine Reihe meiner Scripte nicht mehr richtig.

Ich habe das Problem auf die Systemfunktion file_exists() eingrenzen können. Die Aussetzer scheinen aber ziemlich willkürlich zu sein.

Beim Aufruf ein und derselben Instanz zur Abfrage zwei verschiedener Dateien im selben Verzeichnis (die beide natürlich existieren) findet er die eine Datei, die andere aber nicht.

Hat sich bei diesem Funktionsaufruf irgend etwas geändert, könnte es an einer veränderten php-Configuration liegen?

Ziemlich ratlos Grüsse
Paul

  1. Hallo,

    Rufst du die Dateien beides mal gleich auf? Oder rufst du sie vielleicht einmal per Pfad und einmal per URL auf??

    Grüsse
    Stolzi

    --
    Meine PHP_Scripts unter http://stolzi.westo.at
    zB Forum, Album, Mailer, usw.
    1. Hallo Stolzi,

      wie gesagt, es ist die selbe Instanz (die selbe Zeile Code) mit den selben Variablen, die auf die selbe weise belegt werden.

      Der Aufruf erfolgt mit einer Pfadangabe bezogen auf das aktuelle Arbeitsverzeichnis. Das ganze hat vor dem update einwandfrei funktioniert und ist zuvor auch nicht verändert worden.

      Gruss
      Paul

      Hallo,

      Rufst du die Dateien beides mal gleich auf? Oder rufst du sie vielleicht einmal per Pfad und einmal per URL auf??

      Grüsse
      Stolzi

      1. Hi!

        Der Aufruf erfolgt mit einer Pfadangabe bezogen auf das aktuelle Arbeitsverzeichnis. Das ganze hat vor dem update einwandfrei funktioniert und ist zuvor auch nicht verändert worden.

        Wenns das aktuelle Verzeichnis ist hilf manchmal auch file_exists("./file.txt");

        Oder verwende einen absoluten Pfad.

        Grüße
        Andreas

        1. Hallo,

          es schein laut einiger php-boards ein Problem im Zusammenspiel zwischen php 4.2.3 und Apache 2. nur file_exists zu geben.

          Die dort beschriebenen workarounds funktionieren bei mir leider nicht.

          Ich habe folgende Varianten erfolglos ausprobiert:

          file_exists("pfad/datei.txt") [so wars bisher]
          file_exists("/pfad/datei.txt") [so wars bisher]
          file_exists("./pfad/datei.txt") [dein Vorschlag]
          file_exists(realpath("./pfad/datei.txt")) [workaround vom board]
          file_exists(getcwd()."/pfad/datei.txt") [auf Nummer sicher]
          file_exists("http://www.domain.de/base/pfad/datei.txt") [von Hand]

          hab ich noch eine Variante übersehen?

          Gruß
          Paul

          Hi!

          Der Aufruf erfolgt mit einer Pfadangabe bezogen auf das aktuelle Arbeitsverzeichnis. Das ganze hat vor dem update einwandfrei funktioniert und ist zuvor auch nicht verändert worden.
          Wenns das aktuelle Verzeichnis ist hilf manchmal auch file_exists("./file.txt");

          Oder verwende einen absoluten Pfad.

          Grüße
          Andreas

          1. Hi!

            file_exists("pfad/datei.txt") [so wars bisher]
            file_exists("/pfad/datei.txt") [so wars bisher]
            file_exists("./pfad/datei.txt") [dein Vorschlag]
            file_exists(realpath("./pfad/datei.txt")) [workaround vom board]
            file_exists(getcwd()."/pfad/datei.txt") [auf Nummer sicher]
            file_exists("http://www.domain.de/base/pfad/datei.txt") [von Hand]

            hab ich noch eine Variante übersehen?

            Du machst einen großen Denkfehler bei der Sache, file_exists funktioniert nicht mit remote files, sondern nur über das eigene Dateisystem, siehe http://php.net/file-exists.
            http hat da nichts verloren. /pfad/datei.txt ist also der Rootpath des Dateisystems, nicht der Domain. Vielleicht solltest Du mal die ganzen Konstrukte die Du da erzeugst mit echo ausgeben, nur mal um zu sehen was PHP da jetzt genau erzeugt. Und das solltest Du mit den tatsächliche Gegebenheiten abgleichen, halt wie der tatsächliche Pfad zu der besagten Datei aussieht(nicht http-Pfad!)

            Zum Vergleichen könntest Du Dir auch mal $_SERVER["SCRIPT_FILENAME"] und/oder $_SERVER["DOC_ROOT"] ausgeben lassen!

            Grüße
            Andreas

            1. Hallo,

              das stimmt schon:

              $_SERVER["SCRIPT_FILENAME"] : /serverroot/base/programm.php
              $_SERVER["DOCUMENT_ROOT"] : /serverroot/base
              getcwd() : /serverroot/base (wie zu erwarten)

              die ersten fünf Varianten sollten also die selben Ergebnisse liefern,
              nämlich : /serverroot/base/pfad/datei.txt

              (realpath gibt übrigens immer false zurück)

              Schließlich ist die letzte Variante zwar nicht wirklich sinnvoll, sollte aber (vorrausgesetzt der URL-Wrapper ist aktiviert) die Adresse wieder lokal auflösen.

              Gruß
              Paul

              file_exists("pfad/datei.txt") [so wars bisher]

              file_exists("/pfad/datei.txt") [so ist es korrekt]

              file_exists("./pfad/datei.txt") [dein Vorschlag]
              file_exists(realpath("./pfad/datei.txt")) [workaround vom board]
              file_exists(getcwd()."/pfad/datei.txt") [auf Nummer sicher]
              file_exists("http://www.domain.de/base/pfad/datei.txt") [von Hand]