power-box.de
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 30.06.2005, 16:38   #1
TP-Senior
 
Registriert seit: Nov 2003
Ort: Graz
skaterpunk001 ist auf einem guten Weg

problem beim auslesen eines ordners


hi!

ich möchte alle dateien eines ordners auslesen lassen. dazu habe ich folgenden code benutzt:

PHP-Code:
<?php
$handle 
opendir ("pics/skaten/");
while (
$eintrag readdir($handle))
{
echo 
"$eintrag<br>";
}
closedir($handle);

?>
dadurch wird mir jetzt der gesamte inhalt des ordners angezeigt auch die weiteren unterordner. weiters gibt mir das script einen . und ein .. aus. jetzt habe ich versucht das ganze mit einer if schleife zu filtern. und zwar so:

PHP-Code:
<?php
$handle 
opendir ("pics/skaten/");
while (
$eintrag readdir($handle))
{
if (
is_file($eintrag))
    {
    echo 
"$eintrag<br>";
    }
}
closedir($handle);

?>
ergebnis davon ist dass mir das scirpt jetzt nur mehr die datei Thumb.db anzeigt obwohl in dem ordner massenhaft unterordner bilder videos txt dateien usw sind.

irgendwie verstehe ich nicht ganz warum mir nur die datei Thumb.db ausgegeben wird. aber ich bin mir sicher ihr könnt mir helfen!!

lg
skaterpunk
skaterpunk001 ist offline   Mit Zitat antworten


Alt 30.06.2005, 16:55   #2
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
PHP-Code:
if (!is_dir($eintrag)) { 
oder
PHP-Code:
if ($eintrag != "." || $eintrag != "..") { 
theo ist offline   Mit Zitat antworten
Alt 30.06.2005, 17:01   #3
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
besser man liest erst alles, bevor man antwortet.

mit den beiden ansaetzen oben schliesst du die verzeichnisse aus. wenn du aber in dem verzeichnis ne menge andere datentypen liegen hast, dann kommst du um ein kleines reg-exp nicht herum.
PHP-Code:
if (eregi("(.jpg|.png|.bmp|.gif)"$ergebnis)) { 
das sollte nur die bilder herausfiltern.

gruss
hardy
theo ist offline   Mit Zitat antworten
Alt 30.06.2005, 17:12   #4
TP-Senior
 
Registriert seit: Jan 2005
monsterag macht alles soweit korrekt
Also ich habe das mal so gemacht...

PHP-Code:
  $vz opendir($verzname);
  while( 
gettype($datei readdir$vz))!= boolean )
  {
    if ( 
strlen($datei) > )
    {
      
$array[] = $datei;
      
    }
  }
  
  
closedir($vz); 
monsterag ist offline   Mit Zitat antworten
Alt 30.06.2005, 17:18   #5
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
Warum Theo? Er will ja nur Punkt und PunktPunkt ausschliessen.

Aber hier hast Du einen kleinen Denkfehler:
PHP-Code:
if ($eintrag != "." || $eintrag != "..") { 
bei not x OR not y trifft die Bedingung immer zu!
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 30.06.2005, 17:44   #6
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
hatte ich doch vorhin glatt uebersehen!!!
Zitat:
Zitat von skaterpunk001
... mit einer if schleife zu filtern. ...
www.if-schleife.de

@321: na klasse! und warum ist mit das bei all den bildergalerien noch nie aufgefallen?!
danke fuer den tip. sollte man wissen ...
irgendwie hab ich das wort thumb gelesen und mal wieder an fruehere probleme beim auslesen von bildern fuer thumbnails gedacht ... und dementsprechend geschrieben. dann also zurueck zu variante 1

hardy
theo ist offline   Mit Zitat antworten
Alt 10.07.2005, 20:40   #7
TP-Senior
 
Registriert seit: Nov 2003
Ort: Graz
skaterpunk001 ist auf einem guten Weg
irgendwie funktioniert das bei mir nicht... kann es sein dass bei meiner php version etwas falsch eingestellt ist?? oder kann es sein dass ich etwas bei den dateiberechtigungen umstellen muss damit php die dateien richtig ausliest??

oder vielleicht liegts einfach nur daran dass ich den code nicht 100%ig verstehe ich hab den code einfach von einem php buch rausgenommen...
also im Buch sieht der code so aus:
PHP-Code:
$handle opendir ("/apache/htdocs");
while (
$eintrag readdir($handle)) /*die Zeile versteh i irgendwie net... zu dem Zeitpunkt gibts die Variable $eintrag doch no garnet oder? und wie kann ich sie dann mir readdir($handle) vergleichen??*/
{
if (
is_file($eintrag))
    {
    echo 
"$eintrag<br>";
    }
}
closedir($handle); 
theo hat mir dann geraten in der if-ABFRAGE einfach
PHP-Code:
if (!is_dir($eintrag)) { 
zu verwenden, aber wieso sollt da ein anderes ergebnis kommen als bei
PHP-Code:
if (is_file($eintrag)) 
vielleicht kann mir das alles ja jemand EINFACH erklären, irgendwie blick ich da grad voll nicht durch
skaterpunk001 ist offline   Mit Zitat antworten
Alt 10.07.2005, 21:29   #8
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
vielleicht liegt es auch am wetter. also hier regnet es wie verrueckt!

zuerst oeffnest du dein verzeichnis, damit du lesen kannst. dann liest du in einer schleife (diesmal wirklich) die dateien aus (die zeile, die du nicht verstehst).
die frage nach den abfragen is janz einfach:

is_file() fragt eigentlich, ob der inhalt der variable eine datei ist.

!is_dir() prueft, ob es sich bei dem inhalt der variable nicht (das "!") um ein verzeichnis handelt.

letztlich sollte sie zweite abfrage "unsensibler" sein, also mehr objekte durchs netz schluepfen lassen.

reicht das?

gruss
hardy
theo ist offline   Mit Zitat antworten
Alt 10.07.2005, 21:53   #9
TP-Senior
 
Registriert seit: Nov 2003
Ort: Graz
skaterpunk001 ist auf einem guten Weg
@theo
danke für deine antwort. wenn ich des richtig verstanden hab sollte das ergebnis von is_file() und !is_dir() aber schon ähnlich sein, weil was kein ordner is muss doch eine datei sein und was keine datei is muss ein ordner sein oder unterscheidet php da zwischen mehreren sachen??

was ich bei der schleife nicht ganz versteh ist der vergleich:
PHP-Code:
($eintrag readdir($handle
also ich versteh das so:
solange $eintrag gleich ist wie das eingelesene verzeichnis wird die while-schleife durchlaufen. aber was steht in den variable $eintrag readdir($handle) eigentlich drinnen?
skaterpunk001 ist offline   Mit Zitat antworten
Alt 10.07.2005, 22:58   #10
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
also von der sache her muessten die ergebnisse der beiden abfragen aehnlich sein. aber ich hatte irgendwann schon mal aehnliche probleme beim auslesen von verzeichnissen und bin mit der negierten frage nach den verzeichnissen besser gefahren.
ich wuerde es also eher mit erfahrung als mit logik begruenden wollen. vielleicht koennen, falls es wirklich unterschiede geben sollte, jan oder steffen was dazu sagen.

was die while-schleife angeht, so liegst du etwas falsch. das ist kein vergleich. wenn es, wie du annimmst, ein vergleich auf gleichheit waere, dann muesste dort ein "==" stehen.
die sache ist die: die anweisung einer while-schleife laesst die schleife so lange laufen, wie das ergebnis der anweisung wahr (true) ist.
in diesem falle werden die elemente eines verzeichnisses in der schleife ausgelesen. und ich wuerde die anweisung so interpretieren:
die anweisung ist so lange wahr, wie objekte an die variable $eintrag uebergeben werden koennen. hat die schleife das letzte objekt im ordner ueberschritten wird das ergebnis der anweisung false und damit das abbruchkriterium erreicht. damit wird der inhalt der schleife (deine if-anweisung) nicht mehr ausgefuehrt.

etwas verstaendlicher?

hardy
theo ist offline   Mit Zitat antworten
Alt 10.07.2005, 23:12   #11
TP-Senior
 
Registriert seit: Nov 2003
Ort: Graz
skaterpunk001 ist auf einem guten Weg
hab mir jetzt angeschaut was die funktion readdir() genau macht und mit deiner erklärung hab ich jetzt verstanden um was es geht...
das auslesen funktioniert zwar immer noch nicht aber des werd ich schon noch hinbekommen
skaterpunk001 ist offline   Mit Zitat antworten
Alt 10.07.2005, 23:38   #12
TP-Specialist
 
Benutzerbild von theo
 
Registriert seit: Apr 2002
Ort: 743, evergreen terrace
theo macht sich hier sehr viel Mühe
ich hab dein script noch mal schnell getestet und so sollte es klappen:
PHP-Code:
$handle opendir ("apache/htdocs/"); 
while (
$eintrag readdir($handle))  { 
   if (!
is_dir($eintrag))  { 
    echo 
$eintrag."<br>"
   } 

closedir($handle); 
hardy
theo ist offline   Mit Zitat antworten
Alt 10.07.2005, 23:53   #13
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Vielleicht hilft es Dir ja, wenn ich es nochmal mit anderen Worten beschreibe.

Du willst ein Verzeichnis auslesn. OK.
Dann wollen wir mal das Verzeichnis öffnen:

$handle=opendir('Verzeichnis');

Im $handle steht jetzt ein Zeiger auf das Verzeichnis.
Damit kannst Du zwar nicht viel anfangen, aber die PHP Verzeichnisfunktionen benötigen diesen Zeiger, um mit dem Verzeichnis was anzufangen.

Du wolltest es auslesen - dazu gibt es die praktische Funktion readdir()

Diese Funktion liefert Dir den jeweils nächsten Eintrag in diesem Verzeichnis.
Ein Aufruf
$file=readdir($handle);
würde Dir also den ersten Eintrag in diesem Verzeichnis liefern. Das praktische ist, das diese Funktion sich diesen Eintrag merkt und Dir beim nächsten Aufruf den nächsten Eintrag liefert.
Jetzt weisst Du ja nicht, wieviele Einträge in dem Verzeichnis sind. Sind alle Einträge ausgelesen, liefert Dir diese Funktion ein FALSCH (also 'false').

Es ist also sinnvoll, dies in einer Schleife zu tun, bis eben die Rückgabe false ist.
Dazu eignet sich die while-Schleife:

while(Ergebnis ungleich false) {
...
}

Jetzt brauchen wir nur noch den Ausdruck für while:
false !== ($file = readdir ($handle))

Das heist, die Funktion readdir wird aufgerufen und das Ergebnis in $file gespeichert. Liefert die Funktion am Ende false, steht da:

false !== false

und das ist falsch, die while-Schleife wird verlassen.

Wunderbar, Du bekommst also alle Einträge des Verzeichnisses, hier nochmal im Zusammenhang:

PHP-Code:
while( false !== ($file readdir ($handle)) ) {
   echo 
"Eintrag: $file <br>";

So weit, so gut. Jetzt wollen wir die Einträge . und .. nicht sehen, also:

PHP-Code:
while( false !== ($file readdir ($handle)) ) {
   if (
$file != '.' && $file != '..') {
      echo 
"Eintrag: $file <br>";
   }

Du kannst das noch ausweiten, z.B.
PHP-Code:
while( false !== ($file readdir ($handle)) ) {
   if (
$file != '.' && $file != '..') {
      if (
is_dir($file)) {
         echo 
"Verzeichnis: $file <br>";
      } else {
         echo 
"File: $file <br>";
      }
   }

In diesem Sinne sollte es Dir möglich sein, die für Dich wichtigen Informationen anzuzeigen oder weiter zu verarbeiten.

Ich hoffe, das das jetzt noch verständlicher ist
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 11.07.2005, 12:00   #14
DSB
TP-Veteran
 
Benutzerbild von DSB
 
Registriert seit: Mar 2005
Ort: Weyhe
DSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's gehtDSB hilft, wo's geht
Zitat:
Zitat von skaterpunk001
was ich bei der schleife nicht ganz versteh ist der vergleich:
PHP-Code:
($eintrag readdir($handle
also ich versteh das so:
solange $eintrag gleich ist wie das eingelesene verzeichnis wird die while-schleife durchlaufen. aber was steht in den variable $eintrag readdir($handle) eigentlich drinnen?
Nicht ganz.
Das ist ein häufig gemachter Denkfehler und auch gern von mir gemachter Tippfehler.
Man muss streng unterscheiden:
- ein Gleichheitszeichen ist ein Zuweisungsoperator!!
- zwei Gleichheitszeichen sind ein Vergleich !!!

Die Funktion readdir liest aus dem Dateizeiger ($handle) den nächsten Eintrag aus und speichert das Ergebnis (nämlich den Dateinamen) danach in der Variablen $eintrag als Zeichenkette. Hier findet also die Zuweisung an die Variable statt.

Danach verkürzt sich der Eintrag also auf if ($eintrag).
Steht etwas in $eintrag drin, so ist das Ergebnis der If-Abfrage "wahr" und der Schleifenrumpf wird betreten - liefert readdir als Ergebnis "false", dann wird die Schleife ordnungsgemäß verlassen.
__________________
Gruß, DSB
Einfaches Backup/ Restore Deiner MySQl-Datenbank
DSB ist offline   Mit Zitat antworten
Alt 12.07.2005, 23:07   #15
TP-Senior
 
Registriert seit: Nov 2003
Ort: Graz
skaterpunk001 ist auf einem guten Weg
danke für eure ausführlichen erklärungen... jetzt verstehe ichs zumindest.

ich hab mir jetzt den code von steffen genommen. funktioniert wirklich prima aber nur wenn man bei $handel den ordner angibt in dem das php script selber liegt. gib ich im $handel zB den übergeordneten ordner oder irgendeinen anderen ordner an in dem das php script nicht liegt werden ordner und dateien nicht mehr richtig erkannt plötzlich ist alles ein file.
das script ist immer gleich warum funktioniert es, wenn ich es den ordner auslesen lasse in dem es liegt und bei allen anderen ordnern nicht??
damit nicht alle glauben ich bin bescheuert habe ich einen screenshot von ordner und php ausgabe angehängt.

hoffe ihr könnt mir da auch noch weiterhelfen.
danke schon mal
lg
Miniaturansicht angehängter Grafiken
problem-beim-auslesen-eines-ordners-as.gif  
skaterpunk001 ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
problem beim auslesen eines ordners problem beim auslesen eines ordners
« verwirrt ;) - XML, XSL, XSLT, XSL-Fo zu PDF | Problem mit Login-Script »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu