Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] stat failed for file.jpg

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] stat failed for file.jpg

    So. Hab hier 2 kleinere probleme. Leider hab ich den Sourcecode nicht hier, deshalb stelle ich die Frage mal so..
    Hab eben so ein Script gecodet, um ein Ordner auszulesen, aufzulisten und verlinken. Will eben auch die Größe und Änderungsdatum angeben.

    Wenn ich filemsize oder filedate nehme, kommt immer ein Warning:
    [...] stat failed for file.jpg [..]

    Hab auch schon geoogelt, eben mal geschaut, ob auch der Pfad richtig ist. Ja, ist er!
    Wegen den berechtigungen weiß ich nicht ganz genau, wie das ausschaut; habs nur auf XAMPP auf WinXP als Admin gemacht, sonst nicht. Mehr fällt mir auch nicht ein.

    Nächstes Problem:
    Wenn ich auf ein Link klicke, komm ich eben in den ordner zb builds/ccconbuild, das wird dann an dir url angefügt: builds.php?dir=builds/ccconbuild
    Läuft auch, wenn ich eins nach oben gehen will, muss ich das ja mit ../ machen, allerdings geht das dann ja vom script aus! Wie kann ich das richtig machen, für die anzeige? (dynamsich halt)

    Wäre super, für hilfe, morgen kann ich das script posten
    "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

  • #2
    Dann mach das doch bitte morgen, ich sehe nämlich keinen Sinn darin, das jetzt auf Grundlage dieser Informationen klären zu wollen. Und bemüh Dich dann auch gleich um eine klare Fragestellung. Ich konnte jedenfalls nicht herauslesen, was Du jetzt genau von uns willst.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Zitat von wernersbacher Beitrag anzeigen
      Hab auch schon geoogelt, eben mal geschaut, ob auch der Pfad richtig ist. Ja, ist er!
      Wundert mich wie du deine lokalen Dateien auf dem Server auf Richtigkeit googlen konntest. Bitte poste die genaue Fehlermeldung. Wenn PHP sagt, dass die Datei nicht existiert, tut sie es auch nicht.

      Pfadangaben, die du per URL überträgst, solltest du mit urlencode() oder rawurlencode() kodieren, ein Slash im Parameterwert ist beispielsweise nicht unbedingt das, was man in einer URL haben möchte, da sie schließlich Slashs selbst als Pfadangaben interpretieren könnte.

      Außerdem solltest du aufpassen, dass du dir damit keinen Fileexplorer deines Servers ins Netz stellst, dann wird der nämlich ziemlich schnell nicht mehr deiner sein.
      "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

      Kommentar


      • #4
        Sollte bei einem falschem Pfad nicht eine Fehlermeldung mit no such file or directory angezeigt werden? Wenn nicht, dann kann es eben daran liegen.
        Ich bekomme es aber nicht hin, wie auch immer:

        PHP-Code:
        if ($handle opendir($dirPath)) {
           
        // Ordner ganz auslesen
           
        while (false !== ($file readdir($handle))) {
              
              if (
        $file != "." && $file != "..") {
                 if (
        is_dir("$dirPath/$file")) {
                    
        // Ordner
                    
        echo '<div class="divordner">
                    <a href="?dir='
        .$dirPath.'/'.$file.'">'.$file.'</a><br>
                    </div>'
        ;
                 } else {
                    
        // Datei
                    
        $filetime filemtime($file);
                    echo 
        '<div class="divdatei">
                    <a href="'
        .$dirPath.'/'.$file.'\'>'.$file.'</a><br>';
                    echo 
        date("M j, Y"$filetime);
                    echo 
        "</div>";
                 }
              }
           }
           
        closedir($handle);

        "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

        Kommentar


        • #5
          Was steht denn in $file? Einmal fügst du der Variablen bei is_dir ein $dirPath davor, bei filemtime() aber nicht. Was denn nun? Poste doch einfach die komplette Fehlermeldung und prüf, ob die Datei so überhaupt existiert. Manchmal geben die Ordnerfunktionen relative Pfadangaben zurück, die dann alleinstehend eben keine gültige Pfadangabe mehr darstellen.
          "[URL="http://www.youtube.com/watch?v=yMAa_t9k2VA&feature=youtu.be&t=25s"]Mein Name ist Lohse, ich kaufe hier ein.[/URL]"

          Kommentar


          • #6
            $file gibt den gesamten Dateinamen zurück
            Also eben zB file.jpg
            Das ist zwar kein absoluter Pfad, sollte doch aber kein problem sein, da das Verzecihnis ja mit opendir geöffnet ist?
            "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

            Kommentar


            • #7
              Relative Pfade können im Gegensatz zu absoluten Pfaden durchaus mehrfach gültig sein, d.h. ein (relativer) Pfad wie /dir/file.ext könnte unter C:/ zu finden sein, unter C:/test, unter d:/temp usw. - kommt immer drauf an, von wo aus man es betrachtet (relativ eben).

              C:/dir/file.ext
              C:/test/dir/file.ext
              D:/temp/dir/file.ext

              Das ist zwar kein absoluter Pfad, sollte doch aber kein problem sein, da das Verzecihnis ja mit opendir geöffnet ist?
              Du gibst den Dateinamen ja an die Funktion filemtime() - die arbeitet aber nicht mit Dateihandles sondern mit Dateinamen und ihr ist es herzlich egal, mit welcher Funktion du ein Verzeichnishandle geöffnet hast.
              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

              Kommentar


              • #8
                Achso, okay - und we finde ich den absoluten Pfad eines Dokumentes heraus?
                Mit $_SERVER['DOCUMENT_ROOT']; oder so? Aber fehlt da nicht noch der parameter?
                "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                Kommentar


                • #9
                  Wie gesagt, ein relativer Pfad benötigt immer einen Bezugspunkt (Basisverzeichnis) um zu einem absoluten Pfad aufgelöst werden zu können. Du kannst realpath() verwenden, beachte jedoch den Bezugspunkt - realpath() arbeitet IMHO vom Verzeichnis des ausführenden Scriptes aus.
                  Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                  Kommentar


                  • #10
                    Ich versteh den Parameter von realpath() nicht genau
                    Soll ich da den relativen Pfad einsetzen?
                    "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                    Kommentar


                    • #11
                      Genau.

                      Sollte dieser relative Path (gesehen vom Basisverzeichnis aus) gültig sein, wird dir ein absoluter Pfad zurückgegeben. realpath() löst auch solche Pfade auf:
                      PHP-Code:
                      realpath('../../../dir/file.ext'); 
                      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                      Kommentar


                      • #12
                        Danke, habs inzwischen aber anders gelöst:

                        PHP-Code:
                        $scriptdir dirname(__FILE__);
                        $newscriptdir str_replace("\\""/"$scriptdir);
                        $filetime filemtime($newscriptdir."/".$dirPath."/".$file);
                        $filesize filesize($newscriptdir."/".$dirPath."/".$file);
                        $filesize_mb round(($filesize 1048576), 2); 
                        Okay, fast fertig. Noch eins:
                        Ich hab das schlauerweise mit einer while Schleife auslesen lassen, und mit einer Tabelle ausgegeben.

                        PHP-Code:
                        while (false !== ($file readdir($handle))) {
                              
                              if (
                        $file != "." && $file != "..") {
                                 if (
                        is_dir("$dirPath/$file")) {
                                    
                        // Ordner
                                    
                        echo '<table width="100%" style="background-color:#3a80c8; margin-bottom:3px; padding-left:1px; border-spacing:0px"><tr><td width="50%">
                                    <img src="images/folder.png" alt="Ordner" />&nbsp;<a href="?dir='
                        .$dirPath.'/'.$file.'">'.$file.'</a><br></td>
                                    <td width="25%">-</td><td width="25%">-</td></tr></table>'
                        ;
                                 } else {
                                    
                        // Datei
                                    
                        $filetime filemtime($newscriptdir."/".$dirPath."/".$file);
                                    
                        $filesize filesize($newscriptdir."/".$dirPath."/".$file);
                                    
                        $filesize_mb round(($filesize 1048576), 2);
                                    echo 
                        '
                                    <table width="100%" style="background-color:#8ec5e1; margin-bottom:3px; padding-left:1px; border-spacing:0px"><tr><td width="50%">
                                    <img src="images/file.png" alt="Datei" />&nbsp;<a href="'
                        .$dirPath.'/'.$file.'">'.$file.'</a><br></td>
                                    <td width="25%">'
                        .$filesize_mb.' MB</td><td width="25%">'.date("d.m.Y, H:i"$filetime).'</td></tr></table>';
                                 }
                              }
                           } 
                        Wird immerzu alphabetisch aufgelistet, so solls auch sein, aber was muss ich verändern - damit die Ordner IMMER zuerst angezeigt werden? (Der Code ist nicht ganz von mir, daher die Unverständlichkeit)
                        "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                        Kommentar


                        • #13
                          Leg dir 2 Arrays an, in das erste legst du alle Verzeichnisse, ins zweite alle Dateien. Sortierung und Ausgabe erfolgen dann in einem 2./3. Schritt.
                          Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                          Kommentar


                          • #14
                            hm ja, wo muss ich die zwei arrays geweils anlegen? in der if und else bedingung jeweils? Wenn ja, kannst du mir ein bisschen helfen? Ich weiß nicht so recht, wie ich das da machen muss. Sortiert sind sie ja schon, nur muss ich nach Ordner und Datei trennen
                            "Echte Intellektuelle wie wir sollten ihre Lippen nicht mit Flüchen beschmutzen."

                            Kommentar


                            • #15
                              Ausgangspunkt ist ja ein unsortierter Haufen Dateien/Verzeichnisse, du untersuchst jedes Element dahingehend ob es ein Verzeichnis oder eine Datei ist. Je nachdem wandert es in das eine oder andere Array. Sortierung in Phase 2, Ausgabe in Phase 3

                              Pseudo Code:
                              Code:
                              Array files, dirs;
                              
                              // Phase 1: Trennung von Dateien und Verzeichnissen
                              x = open_dir();
                              while (y = next_file(x)) {
                                  if (is_dir(y)) 
                                      dirs.append(y);
                                  else 
                                      files.append(y);
                              }
                              
                              // Phase 2: Sortierung
                              dirs.sort();
                              files.sort();
                              
                              // Phase 3: Ausgabe
                              dirs.print();
                              files.print();
                              Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                              Kommentar

                              Lädt...
                              X