SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Websites optimieren für Google & Co.

Websites optimieren für Google & Co. zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP für Fortgeschrittene und Experten

PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11.06.2008, 01:28:37
Benutzerbild von Socrates
Socrates Socrates ist offline
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>
__________________
BSc. Applied Computer Science
http://www.bornageek.com

Geändert von Socrates (11.06.2008 um 14:29:55 Uhr)
Mit Zitat antworten
  #2  
Alt 11.06.2008, 02:35:23
feuervogel feuervogel ist offline
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...
Mit Zitat antworten
  #3  
Alt 11.06.2008, 02:56:47
Benutzerbild von Socrates
Socrates Socrates ist offline
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.
__________________
BSc. Applied Computer Science
http://www.bornageek.com

Geändert von Socrates (11.06.2008 um 03:46:55 Uhr)
Mit Zitat antworten
  #4  
Alt 11.06.2008, 09:11:31
DokuLeseHemmung DokuLeseHemmung ist offline
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!!
Mit Zitat antworten
  #5  
Alt 11.06.2008, 14:16:53
Benutzerbild von Socrates
Socrates Socrates ist offline
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
__________________
BSc. Applied Computer Science
http://www.bornageek.com

Geändert von Socrates (11.06.2008 um 14:31:56 Uhr)
Mit Zitat antworten
  #6  
Alt 11.06.2008, 15:34:48
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: RecursiveDirectoryIterator

Zitat:
Zitat von Socrates Beitrag anzeigen
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.
Mit Zitat antworten
  #7  
Alt 11.06.2008, 22:59:49
Benutzerbild von Socrates
Socrates Socrates ist offline
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
__________________
BSc. Applied Computer Science
http://www.bornageek.com
Mit Zitat antworten
  #8  
Alt 13.06.2008, 14:37:25
feuervogel feuervogel ist offline
SELFPHP Guru
 
Registriert seit: Jan 2004
Ort: Leipzig
Beiträge: 4.549
AW: RecursiveDirectoryIterator

Zitat:
Zitat von Socrates Beitrag anzeigen
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)
Mit Zitat antworten
  #9  
Alt 14.06.2008, 18:19:47
Benutzerbild von Socrates
Socrates Socrates ist offline
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
__________________
BSc. Applied Computer Science
http://www.bornageek.com
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:14:49 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt