Verzeichnis einlesen

  • Hey Leute,
    mein Problem ist echt komisch. Ich möchte einfach ein Verzeichnis auslesen. Dabei möchte ich natürlich auch ermitteln, ob Datei oder Verzeichnis. Ihr kennt das bestimmt. Dafür kann man ja die Befehle is_file bzw. is_dir oder meiner Meinung nach in diesem Fall besser: filetype. Das benutzte ich auch, um nun mein Verzeichnis auszulesen. Der Code sieht so aus:


    . und .. werden perfekt ausgegeben. Aber der Rest funktioniert irgendwie nicht wirklich. Folgende Fehlermeldung erscheint:


    Warning: filetype() [function.filetype]: Lstat failed for folder in D:\xampp\htdocs\cloud\public.php



    Was mache ich falsch?



    Mit freundlichen Grüßen,
    Philipp E.

  • soweit ich das weiß, ist da $file schon ein string :/


    versuche mal

    PHP
    <span class="syntaxdefault"><br />filetype</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">readdir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">))<br /> </span><span class="syntaxdefault"></span>
  • Zitat von &quot;drPHIP132&quot;

    versuche mal

    PHP
    <span class="syntaxdefault"><br />filetype</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">readdir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span>


    Das wird nichts, versprochen.


    readdir rückt bei jedem Aufruf einen Eintrag nach vorne, egal ob man es nur im Schleifenkopf oder auch im Schleifenrumpf aufruft.
    Tust du Letzteres, kommen auf einen Schleifendurchlauf zwei readdir-Aufrufe.


    Zu deinem Problem: es kann passieren, dass das Dateisystem (oder die Datei) defekt ist, die Datei noch angezeigt wird, aber gar nicht mehr existiert, wodurch man nicht feststellen kann, ob es eine Datei oder ein Ordner ist. Versuch also, die Datei zu öffnen, den Inhalt rauszukopieren, die Datei zu löschen, mit gleichem Namen neu anzulegen und den Inhalt wieder abzuspeichern. Scheiterst du damit, führ mal chkdsk aus.


    Nutzt du Linux, musst du überprüfen, ob der Webserver die nötigen Rechte hat. Einfach mal die Ausgabe von ls -l ansehen/posten.


    Hoffe, ich konnte helfen,
    webmaster3000

  • kannst du inner schleife die ganzen dateinamen ausgeben lassen, wenn du filetype() und so weglässt?
    mit filetype hatte ich auch meine probleme. wie ich es gelöst habe?

    PHP
    <span class="syntaxdefault"><br />$file_split </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> explode</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">'.'</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $file </span><span class="syntaxkeyword">);</span><span class="syntaxdefault">           </span><span class="syntaxcomment">/*wird zu array gemacht und am . wird getrennt*/</span><span class="syntaxdefault">                                    <br />$file_endung </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"."</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> array_pop</span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $file </span><span class="syntaxkeyword">);</span><span class="syntaxdefault">       </span><span class="syntaxcomment">/*letztes array element (endung) verwenden*/<br /></span><span class="syntaxdefault"> </span>


    hoffe konnte dir helfen,


    Gruß
    Phip

  • Natürlich kann ich alle Dateinamen ausgeben. Es geht lediglich um den Dateityp. Man kann ja irgendwie nicht so viel gucken oder? Ich meine, Dateiname und ob es ein Verzeichnis ist oder eine Datei ist. Mehr kann man ja garnicht ermitteln. Das ist eigentlich nicht so toll...

  • filesize ist eigentlich einfach zu ermitteln.
    Bei filesize benötigst du allerdings den pfad zur datei


    PHP
    <span class="syntaxhtml"><br /><span class="syntaxdefault"><?php<br />    $directory </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxstring">"upload/public"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">        if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">is_dir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$directory</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">            if</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> opendir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$directory</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">                while</span><span class="syntaxkeyword">((</span><span class="syntaxdefault">$file </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> readdir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">))</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">!==</span><span class="syntaxdefault"> false</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">{<br /></span><span class="syntaxdefault">                    $filesize </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> filesize</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$directory </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> $file</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">                </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">            closedir</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">        </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">    </span><span class="syntaxkeyword">}<br /></span><span class="syntaxdefault">?></span></span>
  • Phip S., guck mal in deinen PN-Eingang, folgenden Code zur Abtrennung der Dateiendung hab ich dir Anfang November geschickt:

    PHP
    <span class="syntaxhtml">    <span class="syntaxdefault"><?php<br />        $datei </span><span class="syntaxkeyword">= </span><span class="syntaxstring">"index.html"</span><span class="syntaxkeyword">;<br />        </span><span class="syntaxdefault">$dateiendung_pos </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">strpos</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datei</span><span class="syntaxkeyword">,</span><span class="syntaxstring">"."</span><span class="syntaxkeyword">);<br />        if (</span><span class="syntaxdefault">$dateiendung_pos </span><span class="syntaxkeyword">=== </span><span class="syntaxdefault">false</span><span class="syntaxkeyword">){<br />            </span><span class="syntaxdefault">$dateiendung </span><span class="syntaxkeyword">= </span><span class="syntaxstring">""</span><span class="syntaxkeyword">;<br />        }<br />        else{<br />            </span><span class="syntaxdefault">$dateiendung </span><span class="syntaxkeyword">= </span><span class="syntaxdefault">substr</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$datei</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$dateiendung_pos</span><span class="syntaxkeyword">+</span><span class="syntaxdefault">1</span><span class="syntaxkeyword">);<br />        }<br />    </span><span class="syntaxdefault">?></span></span>


    Hoffe, ich konnte helfen,
    webmamster3000

  • Ja, hast du vergessen. So funktioniert es:


    Naja, den Dateityp muss ich aber immer noch ziemlich aufwenig ermitteln. Dann muss ich erst die Dateiendung ermitteln und dann tausend ifs und so :(((


    Und das letzte Änderungsdatum? Kann man das auch ermitteln? Ich glaube nicht oder?

  • webmaster3000: Oh Danke :)


    Sören: Ja, muss ich gucken, weil ich ja kein freies Internet habe X(


    @drPHIP132: Hmmm...


    Code
    <span class="syntaxdefault"><br />echo </span><span class="syntaxstring">"So ist es besser"</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault"> </span>


    EDIT


    Deine Dateiendungsermittlungsfunktion ( :D ) funktioniert nicht. Probier es selbst mal aus ;)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!