Mit php-script Dateien im Verzeichnis zählen

Hallo,
ich hoffe, mir kann jemand von euch helfen.
Ich möchte Dateien in einem bestimmten Verzeichnis mit php auslesen lassen. Die Anzahl der Dateien (Anzahl der Ordner darf auch mit ausgegeben werden) soll dann auf meiner Homepage wiedergegeben werden.

An der gewünschten Stelle rufe ich das Programm mit folgendem Befehl auf (ich benutze hier eine relative Pfadangabe):

<?php include("scripts/php/index_count_files.php"); ?>

Leider erhalte ich an dieser Stelle auf der Homepage folgende Fehlermeldung:
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php on line 35

(zur Info: line 35 ist die 8.Zeile von unten: Untitled Document<?php function count_in_dir($ordner){
$anzahl = array(‚files‘ => 0,‚ordner‘ => 0);

$handle = opendir($ordner);
while ($file = readdir ($handle)) {
if($file != „.“ && $file != „…“) {
if(!is_dir($file)) {
$anzahl[‚files‘]++;
}
else{
$anzahl[‚dir‘]++;
}
}
}
closedir($handle);

return $anzahl;
}

$anzahl = count_in_dir("http://meinehomepage.de/irgendeinverzeichnis/");

//Jetzt steht in $anzahl[‚file‘] die anzahl der Dateien und in $anzahl[‚dir‘] dir anzahl der Ordner

?>
echo "Es befinden sich $anzahl[‚file‘] Bilder im Ordner:
"; ?>

<?php listimages(); ?>

Hallo,

echo "Es befinden sich $anzahl[‚file‘] Bilder im Ordner /i>
";?>

Das ist PHP, also:

 " ... $anzahl[file] ... "

oder

 " ... {$anzahl['file']} ... ".
<?php listimages(); ?>

Wo kommt listimages() her?

Grüße

CMБ

Hallo,
vielen Dank für Deine schnelle Antwort. :smile:

" … {$anzahl[‚file‘]} … ".

Ich habe die Stelle so korrigiert. War wohl der schwerwiegendste Fehler, denn jetzt kann man zwar den gewünschten Text „Es befinden sich Bilder im Ordner:“ an der Stelle in meiner Homepage lesen, allerdings erschien DIREKT darüber folgende Liste mit Fehlermeldungen:

Warning: opendir() [function.opendir]: URL file-access is disabled in the server configuration in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php on line 14

Warning: opendir(http://floli1privat.fl.funpic.de/web-alben/2008/pool…) [function.opendir]: failed to open dir: no suitable wrapper could be found in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php on line 14

Warning: readdir(): supplied argument is not a valid Directory resource in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php on line 15

Warning: closedir(): supplied argument is not a valid Directory resource in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php on line 25

Fatal error: Call to undefined function listimages() in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php on line 36
Es befinden sich Bilder im Ordner:

<?php listimages(); ?>

Wo kommt listimages() her?

Ist mir reingerutscht. Bzw. ne Andere Funktion. (hier nicht notwendig.)

Über weitere Hilfe würde ich mich freuen.

Flo*li

$anzahl =
count_in_dir("http://meinehomepage.de/irgendeinverzeichnis/");

http://de.php.net/function.opendir
Version Description
5.0.0 path supports the ftp:// URL wrapper.
4.3.0 path can also be any URL which supports directory listing, however only the file:// URL wrapper supports this in PHP 4

also gugen obs directory listing eingeschaltet ist

ansonsten muss es der pfad sein und keine url

//Jetzt steht in $anzahl[‚file‘] die anzahl der Dateien und in
$anzahl[‚dir‘] dir anzahl der Ordner

directory listing eingeschaltet ist

es kann auch sein das URL nutzung ausgeschaltet ist.
z.b. fopen geht keine URL , da mein provider das nicht erlaubt.
http://de.php.net/manual/en/filesystem.configuration…

Hallo,

Ich habe die Stelle so korrigiert. War wohl der
schwerwiegendste Fehler, denn jetzt kann man zwar den
gewünschten Text „Es befinden sich Bilder im Ordner:“ an der
Stelle in meiner Homepage lesen, allerdings erschien DIREKT
darüber folgende Liste mit Fehlermeldungen:

Warning: opendir() [function.opendir]: URL file-access is
disabled in the server configuration in
/usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index_count_files.php
on line 14


Über weitere Hilfe würde ich mich freuen.

Na ja, das hast Du imho ziemlich schief aufgesetzt.
Ich würde erstmal eine Funktion schreiben, die
ein Pfad-Argument annimmt und eine Struktur
‚anzahl‘ zurückliefert. Also etwa so:

[index_count_files.php]

<?php function count_in_dir($where)<br />{
 $cnt = Array('files' =\> 0,'ordner' =\> 0);
 if($dh = opendir($where)) {
 while(($file = readdir($dh)) !== false) {
 if(preg\_match('/^\.+$/', $file)) ; # . / ..
 elseif(is\_dir("$where/$file")) $cnt['ordner']++; # directory
 else $cnt['files']++; # file
 }
 closedir($dh);
 }
 return $cnt;
}
?\>

Die Funktion tut sonst gar nichts und enthält auch
sonst nichts. Jetzt kannst Du nämlich aus einem anderen
File diese Funktion wie folgt aufrufen:

[index_test.php]

<?php include 'scripts/php/index_count_files.php';
$ordner = 'web-alben/2008/poolparty/bin/images/large'; $anzahl = count\_in\_dir($ordner); echo "Es befinden sich {$anzahl['files']} Bilder und " . "{$anzahl['ordner']} Unterverzeichnisse im Ordner: $ordner"; ?\> ... Da die Pfade zum Bildverzeichnis und zum Skript relativ gesetzt sind, ist es klar, daß sich diese Datei 'davor', also z.B. in deinem Hauptverzeichnis befinden muß. Grüße CMБ

Hallo,
Vielen vielen Dank für die Unterstützung.
Hab von Semjon Michailowitsch auch Antwort bekommen, die mir weitergeholfen hat.

5.0.0 path supports the ftp:// URL wrapper.

Was PHP angeht bin ich alles andere als ein Profi, deshalb konnte ich nicht prüfen, ob directory listing eingeschaltet ist. Ich weiß nicht einmal ob man sich beim Hoster funpic.de Einblick in diese Sachen verschaffen kann.

Trotzdem nochmals danke! :smile:

Hallo Semjon,

vielen herzlichen Dank für Deine Hilfe. Hat alles prima geklappt. :smile: Und das Skript konnte ich auch gut nachvollziehen.

Na ja, das hast Du imho ziemlich schief aufgesetzt.

Bin leider alles andere als ein Profi in PHP oder sonstiger Programmierung.

Neues Problem:
Das Skript lässt sich auf meiner Homepage (z.B. index-webalben.php) nur EINMAL anwenden.
Bei wiederholter Benutzung an anderer Stelle kommt eine Fehlermeldung, weil die Variable count_in_dir schon deklariert ist bzw. nicht nochmal verwendet werden kann.

Ich wollte das Problem lösen, indem ich mit
unset ($count_in_dir);
die Variable lösche, damit sie bei wiederholter Verwendung immer wieder neu deklariert ist. Hab „unset …“ einmal im php-file (index_count_files.php), und einmal in der index-Datei meiner HP (index-webalben.php) eingefügt. Allerdings hat dies nicht geklappt.
Wenn dies überhaupt der richtige Ansatz wäre, wo genau müsste ich den Befehl „unset …“ einfügen?

Alternativ habe ich bei der 2.Verwendung in der index-webalben.php-Datei die Variable count_in_dir umbenannt in count_in_dir2. Aber auch dies schlug fehl.

Eine mit der 1. Variante vergleichbare Lösung (also mit Löschen und Neu-Deklarieren) wäre mit lieber, da ich bei der Variante „Umbenennen“ sehr oft die Variable count_in_dir umbenennen müsste.

Ich hoffe, man konnte mir folgen. :smile:
Würde mich freuen, wenn Du mir wieder Hilfestellung geben könntest.
Herzlichen Dank.

Grüße
Flo*li

Hallo

Neues Problem:
Das Skript lässt sich auf meiner Homepage (z.B.
index-webalben.php) nur EINMAL anwenden.
Bei wiederholter Benutzung an anderer Stelle kommt eine
Fehlermeldung, weil die Variable count_in_dir schon deklariert
ist bzw. nicht nochmal verwendet werden kann.

http://nl.php.net/include_once

Grüße

CMБ

Hallo Semjon,

http://nl.php.net/include_once

Super! Genau das hab ich gesucht. Vielen vielen Dank.

Nun würde ich gerne nicht nur ein Verzeichnis (z.B. „webalben“) auslesen/zählen, sondern auch alle Unterverzeichnisse + Files von „bilder“ zählen.
Hab in Foren (http://www.tech-island.com/technet/techtalk/rekursiv…) gelesen, dass es mit rekursiver Programmierung funktioniert. Hab dein skript übernommen und die Funktion „get_dir“ hinzugefügt.

index_count_all_files.php:

<?php function get_dir($dir)
{ $cnt = Array('files' =\> 0,'ordner' =\> 0); if($fp = opendir($dir)) { while(($datei = readdir($fp)) !== false) { if(preg\_match('/^\.+$/', $file)) ; # . / .. elseif (is\_dir("$dir/$datei")) $cnt['ordner']++; # directory else $cnt['files']++; # file get\_dir("$dir/$datei"); } closedir($fp); } return $cnt; } ?\> Der Code-Einbau in index\_xyz.php sieht so aus: <?php include 'scripts/php/index_count_all_files.php';
$ordner = 'web-alben'; $anzahl = get\_dir($ordner); echo " {$anzahl['files']} Bilder und " . "{$anzahl['ordner']} Unterverzeichnisse im Ordner: $ordner"; ?\> Ich erhalte folgende Fehlermeldung auf der HP: Parse error: syntax error, unexpected T\_ELSE in /usr/export/www/vhosts/funnetwork/hosting/floli1privat/scripts/php/index\_count\_all\_files.php on line 10 Hier komm ich leider nicht weiter. Viele Grüße, Flo\*li

Hallo,

ist. Ich weiß nicht einmal ob man sich beim Hoster funpic.de
Einblick in diese Sachen verschaffen kann.

aber sicher doch

http://de2.php.net/phpinfo

phpinfo macht das für dich

dann weisst du was du hast :smile:

Hallo,

hab seit meinem letzten Artikel probiert, versucht und in Foren gesucht. Bin aber nicht fündig geworden.

Wenn ich den Code von der Web-Seite (http://www.tech-island.com/technet/techtalk/rekursiv…):

<?php function get_dir ($dir) {
$fp=opendir($dir); while($datei=readdir($fp)) { if (is\_dir("$dir/$datei") && $datei!="." && $datei!="..") {echo "$datei (dir) "; get\_dir("$dir/$datei"); } else {echo "$datei. ";} } closedir($fp); } ?\> auf meiner Homepage Datei (index\_xyz.php) einfüge, dann werden alle Dateien und Verzeichnisse ausgegeben. klappt wunderbar. Aber das brauch ich nicht. Wie schon gesagt, konnte das Programm nicht so umschreiben, dass die Dateien und Verzeichnisse gezählt und die Anzahl dann ausgegeben wird. Wer kann mir hier helfen? (Die anderen Codes befinden sich in meiner gestrigen Antwort, 1 "Ebene" darüber). Vielen Dank im Voraus, Grüße, Flo\*li