Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

rekusives Programmieren

die frrage ist ziemlich billig aber ich hoffe ihr helft mir trotzdem.
also die frage ist wo ich in diesem Quelltext den pfad angeben muss wo er zu suchen
anfangen soll

f

Code:                   In Zwischenablage kopieren (nur IE)
1">

kann ich auch bestimmen das nur bzw. .txt´s ausgelesen werden???

danke jungs
Hier gehts zum Orginal Eintrag "rekusives Programmieren" im Forum

Antworten

Zitat:
Bananenkopp postete
also die frage ist wo ich in diesem Quelltext den pfad angeben muss wo er zu suchen
anfangen soll

in dem Quelltext garnicht der wird beim ersten Aufruf mitgegeben

Code:                   In Zwischenablage kopieren (nur IE)
2">

Zitat:
Bananenkopp postete
kann ich auch bestimmen das nur bzw. .txt´s ausgelesen werden???

Yep,

z.B. könnte man im else noch die Dateiendung abfragen


Aber was hat das alles mit Rekursion zutun?


2.

danke

Ich denke das müsste dir erklären was es mit einer Rekursion zutun hat.

Wie bekommt man es nun hin, dass das Unterverzeichnis "bilder" und alle Unterverzeichnisse von "bilder" auch noch ausgelesen werden ?
Indem man natürlich die Funktion get_dir() wiederum auf das Verzeichnis "bilder" anwendet und anschliessend auf alle Unterverzeichnisse von "bilder".
Da man dies aber natürlich nicht "per Hand" machen möchte und kann, gibt es nur eine Lösung: Die Fubnktion get_dir() muss sich bei Bedarf, d.h. wenn sie auf ein weiteres Verzeichnis stösst, selber wieder aufrufen und dieses Unterverzeichnis auch auslesen. Trifft sie dann wieder auf Unterverzeichnisse, soll sie sich wiederum selbst aufrufen und auch diese Verzeichnisse auslesen usw..


3.

ich hab es jetzt so gemacht

<?php

get_dir ('C:');
function get_dir ($dir) {
$fp=opendir($dir);
while($datei=readdir($fp)) {
if (is_dir("$dir/$datei") && $datei!="." && $datei!="..") {echo "$datei (dir)
"; get_dir("$dir/$dateiS"); }
else {echo $datei."
";}
}
closedir($fp);
}
?>

dann wird jede datei mehere male aufgelistet fast wie eine Endlosschleife
und das mit nur .txt´s ausgeben funzt auch nicht


4.

Nur damit das klar ist: Ich mach das nicht dir zuliebe!!!
Herausgekramt:
Code:                   In Zwischenablage kopieren (nur IE)
3">




5.

Zitat:
puritania postete
Nur damit das klar ist: Ich mach das nicht dir zuliebe!!!

Warum dann?

[quote]
Code:                   In Zwischenablage kopieren (nur IE)
4">

[/quote] Und was mach ich wenn ich nach html,mpeg,jepg suchen möchte?

Der grund für die endlos Rekusion liegt hier:

Code:                   In Zwischenablage kopieren (nur IE)
5">




6.

wobei das mit [doc]glob [/doc]wesentlich einfacher ginge ;)


7.

@Foggy: Habs korrigiert oben... ;)
Zitat:
Warum dann?
Weil ich das Forum so mag ;) Nein er hat schon den 3. Thread aufgemacht heute mit diesem Thema.
Ja, glob geht nur begrenzt wenn du das rekursiv haben willst, du musst ja alle Ordner UND alle txt-Dateien lesen. Habs auf jeden Fall nicht hinbekommen...


8.

Zitat:
Foggy postete
wobei das mit [doc]glob [/doc]wesentlich einfacher ginge ;)
psst du kannst doch nicht die Pointe verraten ;)


Zitat:
Weil ich das Forum so mag Nein er hat schon den 3. Thread aufgemacht heute mit diesem Thema.
Ja, glob geht nur begrenzt wenn du das rekursiv haben willst, du musst ja alle Ordner UND alle txt-Dateien lesen. Habs auf jeden Fall nicht hinbekommen...
Ab PHP 4.3.3 halt 2x glob dann hat man auch gleich Datein und Dirs logisch getrennt
Code:                   In Zwischenablage kopieren (nur IE)
6">

Ob das nun wirlklich einfacher und schneller ist sei mal dahin gestellt.


9.

@Varon: Poste bitte mal das Script mit den eingebauten 2 glob's...


10.

Hast recht, so richtig optimal gehts daher natürilich nicht mehr...
Aber dennoch möglich ;)
Code:                   In Zwischenablage kopieren (nur IE)
7">




11.

Aaaaaaah jetzt, die statische Variable in der Funktion ist natürlich cool dafür ;) Aber eigentlich müsste glob ja in etwa genau das machen, was ich oben gemacht habe (einfach noch mit patterns und so). Hast du mal ge-benchmarkt?


12.

ich danke euch
habs gott sei dank hin bekommen
hätte ohne euch wohl ein bisschen länger gedauert


13.

Der Vorteil mit Glob besteht darin, dass problemlos nach mehreren Dateitypen gesucht weren kann...
Ich glaube aber, dass diese Methode wesentlich langsamer ist als die geschichte mit readdir. Aber ich tus trotzdem mal benchmarken heut abend, mal sehen :)
Code:                   In Zwischenablage kopieren (nur IE)
8">




14.

Ok, habe den Vorteil der mehreren Dateiendungen auch mal bei mir eingebaut... Dann kannst du 1:1 benchmarken ;) Bin gespannt...
Code:                   In Zwischenablage kopieren (nur IE)
9">




15.

Code:                   In Zwischenablage kopieren (nur IE)
10">

Mit der statischen Variablen tuts die Funktion nur ein mal korrekt!!
Jeder weitere Aufruf produziert Müll..


16.

Zitat:
Mit der statischen Variablen tuts die Funktion nur ein mal korrekt!!
Jeder weitere Aufruf produziert Müll..
Wie wahr, danke für die Berichtigung ;)


17.

@combie: Stimmt, ich kam jetzt durch Foggy überhaupt drauf, das das geht mit dem static. Allerdings... wenn das static in rekursiven Funktionen eh irgendwie nicht so toll ist, wozu ist es dann gut?


18.

Zitat:
wenn das static in rekursiven Funktionen eh irgendwie nicht so toll ist,
Wer sagt das denn.....
Siehe: bcfakcache in: http://www.technischedaten.de/pmwiki2/pmwiki.php?n=Php.FakultaetPermutation


Und für Singletons in PHP4 auch gut zu gebrauchen..
Code:                   In Zwischenablage kopieren (nur IE)
11">




19.

Zitat:
combie postete
Wer sagt das denn.....
Siehe: bcfakcache in: http://www.technischedaten.de/pmwiki2/pmwiki.php?n=Php.FakultaetPermutation

Überzeugt :D Danke dir.


20.

Uuh, jetzt bin ich überrascht ;)

Durchschnitt von getFilesRecursive mit 100 Durchläufen:
1.10294067144sek
Durchschnitt von getGlobRecursive mit100 Durchläufen:
0.72308079958sek

Hier das Script:
Code:                   In Zwischenablage kopieren (nur IE)
12">




21.

Zitat:
Uuh, jetzt bin ich überrascht
Ich auch, aber nur ein bisschen....
Die Globversion, ist im PHP Teil, deutlich schlanker...


22.

Krass... lustigerweise ists bei mir aufm KackWindowsXampp genau umgekehrt, aufm vServer aber genau wie bei dir...
Kompilierter Code ist einfach schneller ;)


23.

Zitat:
Uuh, jetzt bin ich überrascht
Und ich jetzt auch richtig!!

Es ist wirklich so!!
Glob unter Linux, ist fast doppelt so schnell
Opendir ist unter Windows fast doppelt so schnell

Unglaublich....


24.

Phuu... also tatsächlich ...mögliche Gründe?


25.

Zitat:
Opendir ist unter Windows fast doppelt so schnell

Unglaublich....
Also ich habs bisher nur Lokal auf meiner Windoof Mühle getestet...
Fragt mich jetzt nicht welche Version von PHP aber ich glaube 5.1.2...
Heut abend mal auf meinen Linux Server spitzen, mal sehen obs noch schneller wird :)

Ansonsten wissen wirs ja jetzt: Unter Win nehmen wir readdir und unter Linux glob :D


Hier gehts zum Orginal Eintrag "rekusives Programmieren" im Forum
 
phpforum.de | Impressum