Peter: fileexists() auf Dateiname mit Umlauten

Hallo Zusammen,

hab ein kleines Problem, ich möchte mittels fileexists() abfragen ob eine Datei existiert. Im Grunde gar kein Problem. Leider enthalten manche Dateinamen Sonderzeichen wie z.B. Umlaute und dann liefert die Funktion nur den Rückgabewert false. Hat da jemand einen Tipp oder Erfahrung mit diesem Problem?

Muss ja irgendwo ein Problem mit dem Zeichensatz auf dem Linuxserver und dem PHP Zeichensatz sein. Oder irre ich mich da?

Danke schonmal.

Peter

  1. Servus,

    Hat da jemand einen Tipp oder Erfahrung mit diesem Problem?

    Verwende am besten keine Sonderzeichen in Dateinamen.

    Gruss
    Patrick

    --
    sh:( fo:| ch:? rl:( br:> n4:( ie:% mo:) va:} de:> zu:) fl:| ss:| ls:[ js:|
  2. Hellihello Peter,

    immerhin bei mir gehts. Windows und Linux. Weiss aber nicht, warum. Aber vergiss nicht ggf., dass die Browser mit den Umlauten mucken.

    frankx

    1. Hellihello Peter,

      immerhin bei mir gehts. Windows und Linux. Weiss aber nicht, warum. Aber vergiss nicht ggf., dass die Browser mit den Umlauten mucken.

      frankx

      Hallo Frank,

      danke für die Antwort muss dann wohl nochmal was auf Forschungsreise gehen. Aber eine Frage hab ich da an Dich, bei mir kommt der Dateiname über GET, ist das bei dir auch der fall?

      Peter

      1. Hellihello,

        danke für die Antwort muss dann wohl nochmal was auf Forschungsreise gehen. Aber eine Frage hab ich da an Dich, bei mir kommt der Dateiname über GET, ist das bei dir auch der fall?

        nein, dann hast du doch das browserproblem:

          
        <?php  
         echo file_exists("pöp.php"); //gibt 1 bei mir  
        ?>  
        
        

        frankx

  3. echo $begrüßung;

    hab ein kleines Problem, ich möchte mittels fileexists() abfragen ob eine Datei existiert. Im Grunde gar kein Problem. Leider enthalten manche Dateinamen Sonderzeichen wie z.B. Umlaute und dann liefert die Funktion nur den Rückgabewert false. Hat da jemand einen Tipp oder Erfahrung mit diesem Problem?
    Muss ja irgendwo ein Problem mit dem Zeichensatz auf dem Linuxserver und dem PHP Zeichensatz sein. Oder irre ich mich da?

    Die Zeichenkodierung deines Scripts wäre interessant. PHP nimmt da keine Änderung/Anpassung vor, es reicht die Bytes einfach durch. Wenn die Zeichenkodierung des Dateisystems eine andere ist als du für das Script verwendest, kann ich mir durchaus vorstellen, dass das Ursache für das beschriebene Verhalten ist.

    Wenn du den Dateinamen probeweise mit utf8_encode() behandelst und es funktioniert, dann wird dein Script ISO 8859-1 sein, das Dateisystem hingegen UTF-8.
    Wenn du den Dateinamen probeweise mit utf8_decode() behandelst und es funktioniert, dann wird dein Script UTF-8 sein, das Dateisystem hingegen ISO 8859-1.
    Andere Konstellationen wären auch denkbar, aber das sind die beiden gebräuchlichsten.

    echo "$verabschiedung $name";

    1. Wenn du den Dateinamen probeweise mit utf8_encode() behandelst und es funktioniert, dann wird dein Script ISO 8859-1 sein, das Dateisystem hingegen UTF-8.
      Wenn du den Dateinamen probeweise mit utf8_decode() behandelst und es funktioniert, dann wird dein Script UTF-8 sein, das Dateisystem hingegen ISO 8859-1.
      Andere Konstellationen wären auch denkbar, aber das sind die beiden gebräuchlichsten.

      war auch mein erster Ansatz, hatte utf8_encode() probiert und hat leider nicht funktioniert. Muss mich wohl damit abfinden das die Lösung nicht so einfach zu finden ist. Aber danke für die Antwort, dadurch weiß ich, das ich auf jedenfall an der richtigen Stelle suche.

      Peter

      1. echo $begrüßung;

        war auch mein erster Ansatz, hatte utf8_encode() probiert und hat leider nicht funktioniert. Muss mich wohl damit abfinden das die Lösung nicht so einfach zu finden ist. Aber danke für die Antwort, dadurch weiß ich, das ich auf jedenfall an der richtigen Stelle suche.

        Noch eine Idee: Lass dir von deinem Script aus den Directory-Inhalt auflisten, dann solltest du sehen, wie der problematische Dateiname aus Script-Sicht ausieht. Notfalls kannst du dir die Bytes mit chunk_split(bin2hex($dateiname), 2, ' ') einzeln anzeigen lassen.

        echo "$verabschiedung $name";