PHP Dateifunktionen spielen verrückt

Alles, was PHP betrifft, kann hier besprochen werden.

PHP Dateifunktionen spielen verrückt

Postby ultimazer1 » 30. August 2006 21:55

Hi,

ich habe noch XAMP Version 1.4.10a auf meinem Windows Rechner laufen.
Ich lese dort ein Verzeichnis aus:

Code: Select all
$objDir = dir("dir/");      

while(($item = $objDir->read()) !== false)
{         
   if ($item == "." || $item == "..")
   {
      continue;
   }
         
   echo "item: ".$item." ".filetype($item)."<br>";
         
   if(is_dir($item))
   {
      echo $item.": dir<br>";
   }
   else
   {
      echo $item.": file<br>";
   }
   
}

$objDir->close();



Nun tritt ein merkwürdiger Fehler auf:

Dateifunktionen wie is_dir(), is_file() geben IMMER false zurück (es wird immer der else Block gezeigt) wenn auf $item angewendet, andere FUnktionen wie filetype geben bei Anwendung auf $item gar Fehlermeldungen aus:

Warning: filetype() [function.filetype]: Lstat failed for test.txt in F:\Programme\apachefriends\xampp\htdocs\test\INCLUDES\functions\func.files_dirs.php on line 19

Das Problem mit den Dateifunktionen tritt nur an dieser Stelle in meinem Programm auf. Ich habe das Verzeichnisauslesen auch mit opendir() und den entsprechenden Funktionen versucht, was ja auch möglich ist - das selbe Bild.

Was ist hier los?? :)

Grüße, Flo[/i]
ultimazer1
 
Posts: 3
Joined: 30. August 2006 21:41

Re: PHP Dateifunktionen spielen verrückt

Postby Kenshin » 31. August 2006 01:18

ultimazer1 wrote:
Code: Select all
while(($item = $objDir->read()) !== false)

Da ich nach 3 Jahren Pause gerade erst wieder angefangen habe mich mit PHP zu beschaeftigen, kann das was ich jetzt erzaehle auch voelliger Quatsch sein, aber ich glaube mich zu erinnern, dass der Syntax fuer "ungleich" != war und nicht !==. Evtl. legt PHP das zweite = als definierendes aus und legt daher jede $item als false fest.

Wie gesagt: kann auch totaler Quatsch sein. Hatte allerdings frueher oefter's Probleme damit, dass ich bei einer if-Schleife immer dasselbe zurueck bekommen hab, weil ich = statt == dastehen hatte ^^

mfg, Kenshin
User avatar
Kenshin
 
Posts: 23
Joined: 30. August 2006 10:55
Location: Munich (Germany)

Postby KingCrunch » 31. August 2006 04:03

@Kenshin: nach 3 Jahren auch kein Wunder. "!==" heißt so etwas wie "unidentisch", "!=" heißt demnach "ungleich". Der Unterschied sollte selbst nachprüfbar sein.

@topic: $item is ein Objekt, kann also nicht mit "." oder ".." verglichen werden (sollte es zumindest nicht). War das das Problem?
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby ultimazer1 » 31. August 2006 12:59

Hi, danke für eure Mühen.

Die Operatoren === oder auch !== vergleichen nicht nur den Wert der Varibalen sondern auch den Datentyp ;)

== oder != vergleich nur den Inhalt der Variablen.

Habe nach dem studieren einiger Codebeispiele bei php.net den (dummen) Fehler entdeckt :D
Das ganze lag an der Ordnerstruktur meiner Anwendung. Nicht nur dir() muss der vollständige Pfad zum Verzeichnis übergeben werden. Auch is_dir() etc. benötigen natürlich den vollständigen Pfad...dort wurde aber immer nur der Dateiname übergeben.

Es läuft jetzt alles :D

Danke trotzdem.

Grüße, Flo
ultimazer1
 
Posts: 3
Joined: 30. August 2006 21:41


Return to PHP

Who is online

Users browsing this forum: No registered users and 21 guests