CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
11.06.2008, 01:28:37
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
RecursiveDirectoryIterator
Hallo!
Ich bastel gerade an einer kleinen Klasse, die, wie der Titel schon verrät, auf dem RecursiveDirectoryIterator aufbaut. Ist eigentlich eher eine Spielerei, um etwas besser mit der Materie der Iteratoren klar zu kommen, denn dokumentiert sind diese leider noch kein Stück. Daher heißt es rumexperimentieren und das habe ich getan. Weitergekommen bin ich leider nicht. Meiner Meinung nach ist die Methode bzw. der Einsatz der Iterator-Funktionen in dieser Methode vollkommen korrekt. Daher muss der Fehler im Construkcor liegen. Wäre toll, wenn mir jemand helfen könnte.
MfG, Andy
PHP-Code:
<pre> <?php error_reporting(E_ALL);
/*** * DirHandler class allows listing, editting, deleting and creating directories * * @package DirHandler * @version 0.1 * @author Andreas Wilhelm <Andreas2209@web.de> * @copyright Andreas Wilhelm **/ class DirHandler { // class variables private $iterator;
/** * Constructor - Is called when the class is instanced * * @access: public * @param Str $path * @return NONE */ public function __construct($path) { $path = realpath($path); $this->iterator = new RecursiveDirectoryIterator($path); }
/** * listDir() - Returns an array that holds the directory-listing * * @access public * @return Array */ public function listDir() { // create listing-array $list = array(); foreach($this->iterator as $file) { if($file->isDir() && !$file->isDot()) { // save entry to array $list[] = $file->current(); // check if there are childrens if($file->hasChildren()) { $childs = $file->getChildren(); $this->listDir($childs); } } elseif($file->isFile()) { // save entry to array $list[] = $file->current(); } } return $list; } }
try { $dir = new DirHandler('avedo_design'); $list = $dir->listDir(); print_r($list); }
catch(Exception $e) { echo "Error:<br />"; echo "<b>" . $e->getLine() . "</b>" . ": <i>" . $e->getMessage() . "</i><br />"; }
?> </pre>
Geändert von Socrates (11.06.2008 um 14:29:55 Uhr)
|
11.06.2008, 02:35:23
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: RecursiveDirectoryIterator
und genau jetzt ist es reichlich sinnlos eine klasse zu schreiben, denn dafür reicht exakt eine funktion...
|
11.06.2008, 02:56:47
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: RecursiveDirectoryIterator
Wofür reicht eine Funktion? Zum listen der Verzeichnisse? Und warum ist es sinnlos eine Klasse zu schreiben? Es sollen ja noch weitere Methoden hinzukommen. Bin halt noch nicht weiter gekommen, da dieser Fehler schon aufgetreten ist, aber es sollen noch Methoden zum rekursiven Löschen von Verzeichnissen, sowie zum Verschieben, Umbenennen und Erstellen von Verzeichnissen hinzugefügt werden. Kannst du mir vielleicht sagen wo der Fehler bisher liegt?
MfG, Andy
//EDIT: Wenn ich ein Slash vor den Pfad setze, dann erhalte ich auch eine andere Fehlermeldung:
Zitat:
Error:
27: RecursiveDirectoryIterator::__construct() [function.RecursiveDirectoryIterator---construct]: open_basedir restriction in effect. File(/test) is not within the allowed path(s): (/home/www/web193:/tmp)
|
Wie kommt die zu stande und wie werde ich sie los? Ist mir leider noch nie begegnet. Lasse ich den Slash weg sagt er mir Invalid Argument for foreach() bzw. wirft die Exception.
Geändert von Socrates (11.06.2008 um 03:46:55 Uhr)
|
11.06.2008, 09:11:31
|
SELFPHP Experte
|
|
Registriert seit: Jun 2008
Alter: 15
Beiträge: 2.269
|
|
AW: RecursiveDirectoryIterator
PHP-Code:
$this->iterator = parent::__construct($path);
En Konstruktor hat keinen Return Value!!
|
11.06.2008, 14:16:53
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: RecursiveDirectoryIterator
Mist hatte ich wieder mal vergessen. Leider gibts da noch ein kleines Problem. Ich habe den Code jetzt abgeändert, aber es tritt eine neue Fehlermeldung auf:
Zitat:
Error:
55: RecursiveDirectoryIterator::__construct(/home/www/web193/html/test/test2) [function.RecursiveDirectoryIterator---construct]: failed to open dir: Too many open files
|
Zudem beschwert sich PHP über dieses current()
PHP-Code:
elseif($file->isFile()) { // save entry to array $list[] = $file->current(); }
Wenn ich es durch getFilename() ersetzte geht es plötzlich. Wieso? Sollte doch auch mit current() gehen! Oder?
Kann mir da noch jemand helfen??
MfG, Andy
Geändert von Socrates (11.06.2008 um 14:31:56 Uhr)
|
11.06.2008, 15:34:48
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: RecursiveDirectoryIterator
Zitat:
Zitat von Socrates
Wofür reicht eine Funktion? Zum listen der Verzeichnisse? Und warum ist es sinnlos eine Klasse zu schreiben? Es sollen ja noch weitere Methoden hinzukommen. Bin halt noch nicht weiter gekommen, da dieser Fehler schon aufgetreten ist, aber es sollen noch Methoden zum rekursiven Löschen von Verzeichnissen, sowie zum Verschieben, Umbenennen und Erstellen von Verzeichnissen hinzugefügt werden.
|
Das Problem ist, dass Du alles mögliche in Klassen packen möchtest, auch an den übertriebensten Stellen. Für alle genannten Funktionen brauchts keine Klasse, sondern es reichen mehrere alleinstehende Funktionen aus. Hier findet kein (durchdachtes) OOP mehr statt, sondern krampfhafte Übertreibung.
Zitat:
Kannst du mir vielleicht sagen wo der Fehler bisher liegt?
|
Nein, bevor Iteratoren zu PHP kamen, habe ich angefangen Python zu nutzen. Dort gibt es das yield-Statement und das ist kinderleicht zu verstehen.
|
11.06.2008, 22:59:49
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: RecursiveDirectoryIterator
Abend!
Vielleicht hast du recht. vielleicht ist es in diesem Fall besser einzelne Funktionen zu basteln, die diese Aufgaben übernehmen. Ich dachte es wäre auch in diesem Fall sehr praktisch, da ich an einer Datei mehrere solcher Operationen hintereinander ausführen möchte. Wie kann man solche Funktionen denn sinnvoll zusammenfassen? Für jede Funktion eine eigene Datei ist ja auch nicht recht sinnvoll. Sollte ich alle einzelnen Funktionen einfach in eine Datei packen oder sollte ich thematisch zusammenhängende Funktionen getrennt zusammenfassen?
MfG, Andy
|
13.06.2008, 14:37:25
|
SELFPHP Guru
|
|
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
|
|
AW: RecursiveDirectoryIterator
Zitat:
Zitat von Socrates
Abend!
Vielleicht hast du recht. vielleicht ist es in diesem Fall besser einzelne Funktionen zu basteln, die diese Aufgaben übernehmen. Ich dachte es wäre auch in diesem Fall sehr praktisch, da ich an einer Datei mehrere solcher Operationen hintereinander ausführen möchte.
|
Hm, Du meinst:
verschiebe(kopiere(bennene_um("datei", "datei_neu"), "datei_kopie"), "datei_bewegt"); ?
Zitat:
Wie kann man solche Funktionen denn sinnvoll zusammenfassen? Für jede Funktion eine eigene Datei ist ja auch nicht recht sinnvoll. Sollte ich alle einzelnen Funktionen einfach in eine Datei packen oder sollte ich thematisch zusammenhängende Funktionen getrennt zusammenfassen?
MfG, Andy
|
Was meinst Du mit: "thematisch zusammenhängend getrennt zusammenfassen" ?!?
Ich würde halt einfach alle Funktionen, mit denen man Dateien bearbeitet in eine datei packen und diese dann file_utils.php nennen oder so...
Geändert von feuervogel (13.06.2008 um 14:37:36 Uhr)
|
14.06.2008, 18:19:47
|
|
Member
|
|
Registriert seit: Jul 2006
Ort: Göttingen/Deutschland
Alter: 35
Beiträge: 586
|
|
AW: RecursiveDirectoryIterator
@Vorhaben: Ja so ungefähr. Es soll erst ein Tar-Archiv in einen temporären Ordner entpackt werden, dann soll ein Ordner erstellt werden. In diesen sollen die Dateien verschoben werden.
@Funktionen: Ja auch das meinte ich ungefähr so. Also dass ich alle Datei-Funktionen in eine Datei packe und alle Datenbank-Funktionen in eine Datei etc.
Danke für deinen Hinweis und deine Hilfe. OOP ist eben nicht immer die Lösung und in diesem Fall schon gar nicht, da hast du wohl Recht.
MfG, Andy
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 10:14:49 Uhr.
|