Verzeichnis einlesen

PHP - alles Rund um die Programmierung von PHP und MySQL

Ist die geniale Programmiersprache, da sowohl für Einsteiger geeignet wie auch für Profis.

Moderator: lauras

Beiträge bitte im neuen Forum

Verzeichnis einlesen

Beitragvon Yamram » Donnerstag 12. Januar 2012, 20:21

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:
Code: Alles auswählen
<?php
   $directory = "upload/public";
   if(is_dir($directory)) {
      if($handle = opendir($directory)) {
         while(($file = readdir($handle)) !== false) {
            echo "<li>Name: ".$file." (Typ: ".filetype($file).")</li>\n";
         }
      closedir($handle);
      }
   }
?>

. 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.
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon drPHIP132 » Donnerstag 12. Januar 2012, 20:52

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

versuche mal
Code: Alles auswählen

filetype
(readdir($handle))
 
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Verzeichnis einlesen

Beitragvon Yamram » Freitag 13. Januar 2012, 15:20

Ne, funktioniert natürlich auch nicht:
Warning: filetype() [function.filetype]: Lstat failed for text.txt in D:\xampp\htdocs\cloud\public.php on line 115
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon webmaster3000 » Freitag 13. Januar 2012, 15:20

drPHIP132 hat geschrieben:versuche mal
Code: Alles auswählen

filetype
(readdir($handle)) 

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
Zuletzt geändert von webmaster3000 am Montag 30. Januar 2012, 19:54, insgesamt 1-mal geändert.
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Verzeichnis einlesen

Beitragvon Yamram » Freitag 13. Januar 2012, 17:28

@webmaster3000: Also, ich schwöre dir, dass die Datei nicht defekt ist und auch existiert :D Ich habe sie extra erstellt.
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon drPHIP132 » Freitag 13. Januar 2012, 17:58

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?
Code: Alles auswählen

$file_split 
= explode( '.' , $file );           /*wird zu array gemacht und am . wird getrennt*/                                    
$file_endung 
= "." . array_pop( $file );       /*letztes array element (endung) verwenden*/
 


hoffe konnte dir helfen,

Gruß
Phip
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Verzeichnis einlesen

Beitragvon Yamram » Freitag 13. Januar 2012, 18:16

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...
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon drPHIP132 » Freitag 13. Januar 2012, 18:18

du kriegst aber auch immerhin auf meine weise die dateiendung herraus.
hm..keine ahnung was hat ein ordner für eine dateiendung?
kannst ja dann einen filter machen.

gruß
Phip
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Verzeichnis einlesen

Beitragvon Yamram » Freitag 13. Januar 2012, 18:21

Ein Ordner hat garkeine Endung! Ja, die Dateiendung kann ich ermitteln. Aber zum Beispiel die Dateigröße, wie soll ich die schon ermitteln???? Da ist PHP nicht so gut :(
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon drPHIP132 » Freitag 13. Januar 2012, 18:28

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

Code: Alles auswählen

<?php
    $directory 
= "upload/public";
        if(is_dir($directory)) {
            if($handle = opendir($directory)) {
                while(($file = readdir($handle)) !== false) {
                    $filesize = filesize($directory . $file);
                }
            closedir($handle);
        }
    }
?>
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Verzeichnis einlesen

Beitragvon Yamram » Freitag 13. Januar 2012, 18:35

Das ist ja lustig, letztens habe ich das sogar noch benutzt und vor Kurzem hat mir jemand erzählt, man könnt die Dateigröße nicht ermitteln. Ein komischer Zufall...
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon drPHIP132 » Freitag 13. Januar 2012, 18:53

funktioniert es? glaube habe vergessen ein slash einzusetzen.
Benutzeravatar
drPHIP132
HTML-Acrobat
 
Beiträge: 744
Registriert: Samstag 15. Januar 2011, 19:10
Wohnort: Sachsen, Erzgebirge

Re: Verzeichnis einlesen

Beitragvon webmaster3000 » Freitag 13. Januar 2012, 19:52

Phip S., guck mal in deinen PN-Eingang, folgenden Code zur Abtrennung der Dateiendung hab ich dir Anfang November geschickt:
Code: Alles auswählen
    <?php
        $datei 
"index.html";
        
$dateiendung_pos strpos($datei,".");
        if (
$dateiendung_pos === false){
            
$dateiendung "";
        }
        else{
            
$dateiendung substr($datei,$dateiendung_pos+1);
        }
    
?>


Hoffe, ich konnte helfen,
webmamster3000
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Re: Verzeichnis einlesen

Beitragvon Yamram » Freitag 13. Januar 2012, 19:58

Ja, hast du vergessen. So funktioniert es:
Code: Alles auswählen
<?php
    $directory = "upload/public";
        if(is_dir($directory)) {
            if($handle = opendir($directory)) {
                while(($file = readdir($handle)) !== false) {
                    $filesize = filesize($directory."/".$file);
               echo  "<li>".$file." GRÖSSE: ".$filesize."</li>";
                }
            closedir($handle);
        }
    }
?>


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?
Benutzeravatar
Yamram
HTML-Sonderfall
 
Beiträge: 616
Registriert: Samstag 5. Februar 2011, 20:05
Wohnort: C:\Users\Yamram\Desktop\Papierkorb.ink

Re: Verzeichnis einlesen

Beitragvon webmaster3000 » Freitag 13. Januar 2012, 20:02

Yamram hat geschrieben:Und das letzte Änderungsdatum? Kann man das auch ermitteln? Ich glaube nicht oder?

rtfm
webmaster3000
HTML-Doctor
 
Beiträge: 257
Registriert: Donnerstag 29. September 2011, 16:32
Wohnort: Irgendwo in Thüringen

Nächste

Beiträge bitte im neuen Forum

Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

cron