opendir() und readdir()
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anweisung
array
code
existieren
fehler
fehlermeldung
file
funktion
klammern
ordner
ordners
parameter
pfad
punkt
sagen
suchen
versuchen
verwenden
verzeichnis
zeile
-
Hi,
ich versuche mit opendir() und readdir() ein Verzeichnis auszulesen.
Das klappt auch soweit ganz gut, solange ich bei opendir() als Parameter "." übergebe. Meine Nachforschungen im Internet haben ergeben, dass ich eigentlich auch ein mehr oder weniger beliebiges Verzeichnis mit opendir() öffnen kann, dafür müsste ich als Parameter "beispiel_dir" bzw. "beispiel_dir/" angeben. Es funktioniert aber nicht. Weder bei mir auf meinem localhost (Wamp5), noch auf LimaCity. Ich habe auch schon probiert, den Pfad komplett anzugeben, sowohl vom "www"-Verzeichnis aus, als auch vom "richtigen" Pfad aus, also C:/www (oder wo das Verzeichnis auch immer abgelegt ist). Genauso wenig funktioniert "/beispiel_dir/".
Tja, jetzt bin ich irgendwie mal wieder am Ende...
Habt ihr eine Idee?
Gruß
Beitrag geändert: 9.10.2008 15:15:22 von tel08a-bama -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wahrscheinlich bekommst du folgende Fehlermeldung (und die sollte dir eigentlich schon alles sagen):
opendir(): failed do open directory "beispiel_dir". No such directory in irgendeineDatei.php in line Zeile
Ich behaupte mal, du öffnest wirklich den Ordner beispiel_dir, der auf dem Dateisystem nicht existiert.
Bevor du einen Ordner öffnen kannst, musst du ihn logischer Weise erstellen. Das geht mit mkdir().
allgemein kannst du mit readdir auf jedes Verzeichnis auf deinem Server zugreifen. Es muss nur existieren. -
versuch mal den aktuellen Ordner zu öffnen, indem du als Parameter nurn . (einen Punkt) eingibst, wenn das auch nicht geht, dann ist was falsch, denn der Ordner in dem Das Script liegt muss ja existieren.
-
Hi,
sorry wenn ich das so sage, aber ihr lest meine Fragestellung nicht richtig.
Ich habe schon gesagt, dass es funktioniert mit dem Punkt, also
.opendir(".")
Und ich habe gesagt ich möchte ein Verzeichnis auslesen, nichts anlegen. So blöd bin ich auch nicht, das ich versuche, ein Verzeichnis zu öffnen, was es nicht gibt.
Beitrag geändert: 9.10.2008 16:24:47 von tel08a-bama -
Am besten, du postest mal deinen Code (und deine Fehlermeldung, falls du eine bekommst), dann können dir am besten helfen. Entweder ist im Code ein Fehler oder du hast keinen Lesezugriff auf das Verzeichnis, das du lesen willst (wobei mich das aber sowohl bei einer "normal" eingerichteten Windows-Testumgebung als auch bei Lima-City wundern würde).
Beitrag geändert: 9.10.2008 17:30:50 von sandrock-jonas -
Also hier der Code:
// Anzeigen der Ordnerliste außer $list_ignore: $files = array(); $list_ignore = array ('.', '..', 'index.php','dossier.gif','logo.jpg', 'file.png'); // "." funktioniert, ein anderer Ordner nicht!!! $path = "."; if ($handle = opendir($path)) { $msg = 'No directorys yet.<br />To create a new one, just create a directory in \'www\'.'; // Ordnerliste in $files while ($file = readdir($handle)) { // Ich möchte auch in den übergeordneten Ordner springen können, deswegen auch ".." if (is_dir($file) && !in_array($file,$list_ignore) || $file == '..') { $msg = ''; $files[]=$file; } } closedir($handle); // Funktion für usort () function cmp($a, $b) { return strcmp($a, $b); } // Sortieren der Ordnernamen von A-Z usort($files, "cmp"); // Ausgabe der Ordner als Link for ($i = 0; $i < sizeof ($files); $i++) { echo '<a class="ditem" href="'.$files[$i].'"><img src="http://www.tel08a-bama.lima-city.de/dossier.gif" alt="image dossier" /> '; if ($files[$i] == '..') echo 'Parent Directory'; else echo $files[$i]; echo '</a>'; } // Hier sollen nach den Ordnern die Dateien ausgegeben werden if ($dir = @opendir($path)) { $files = NULL; $files = array(); while ($file = readdir($dir)) { if (!is_dir ($file) && !in_array($file,$list_ignore)) { $files[]=$file; } } closedir ($dir); usort($files, "cmp"); for ($i = 0; $i < sizeof ($files); $i++) { echo '<a class="ditem" href="'.$files[$i].'"><img src="http://www.tel08a-bama.lima-city.de/file.png" alt="image dossier" /> '.$files[$i].'</a>'; } } } else $msg = 'Cannot open directory!'; echo $msg;
-
Aber was bekommst du als Fehlermeldung??
Kommt überhaupt eine??
kann es sein, dass das Verzeichnis leer ist?? -
Nein, das Verzeichnis ist nicht leer und es kommt auch keine Fehlermeldung.
-
<?php if (is_dir($file) && !in_array($file,$list_ignore) || $file == '..') ?>
was willst du mit dieser Zeile bezwecken? Ich vermute, hier liegt der Fehler:
1. is_dir($file) überprüft, ob $file ein Verzeichnis ist. Somit bekommst du höchstens die Verzeichnisse.
2. Bekommst du die Verzeichnisse aber nicht, weil die Funktion is_dir($file) das Verzeichnis $file im Ordner '.' sucht. Es müsste: is_dir($path.'/'.$file) heißen (mit oder ohne '/', je nach dem, ob du den Slash schon in $path hast).
3. Was soll der Interpreter zuerst auswerten? Das && oder das ||? -> unklar, entweder verschachtelte if()s benutzen, 4. beachten oder Klammern (bin mir aber nicht sicher, ob das mit der Klammerung auch bei if() funktioniert)!
4. !in_array($file,$list_ignore) || $file == '..' -> kannst du dir sparen, indem du den Eintrag '..' aus $list_ignore 'raus nimmst.
Damit ergibt sich für die if()-Bedingung:
<?php if (is_dir($path.'/'.$file) && !in_array($file,$list_ignore)) ?>
-
Stimmt, wenn ich $list_ignore verändere, kann ich meine if-Anweisung verändern.
Das habe ich gemacht. Es wird nun anstatt aller Ordner nur das '..' ausgegeben.
Was meinst du mit ich müsste $path verwenden? Wenn ich einfach nur
angebe, sucht die Funktion mir den Ordner beispiel_dir im Verzeichnis, wo meine .php abgelegt ist, das, dass ich überisdir("beispiel_dir")
anspreche. Oder nicht? Das will ich auch bezwecken, der Ordner liegt in meinem aktuellen Verzeichnis.isdir(".")
Was ich damit überhaupt bewzecken will?
Ich will eine Ordnerliste ausgeben (mit folgender Dateiliste, nicht gemischt) und wenn ich auf einen Ordner klicke, soll der Inhalt dieses Ordners ausgegeben werden.
Für die erste Ordnerliste kann ich als Pfad $path="." verwenden, aber dann muss ich ja den Namen des "geklickten" Ordners als Pfad setzen. Wenn ich einfach den Namen als Pfad angebe, $path="beispiel_dir", dann sucht er ja den Ordner in meinem Verzeichnis, das ich mit "." anspreche, oder nicht?
Ich habs gelöst...
irgendwie liegts, wie mir schon angeraten, an der Funktion isdir(), ich habe mir jetzt einfach selber eine geschrieben und jetzt funktionierts problemlos.
Nochmal danke für alle Anregungen!!
Beitrag geändert: 10.10.2008 10:45:55 von tel08a-bama -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage