Entwicklung - PHP - Rekursives Auslesen von Verzeichnissen und Ermitteln von geänderten Dateien

PHP: Rekursives Auslesen von Verzeichnissen und Ermitteln von geänder...

rob (57)

rob

12.08.2002 00:42

Vinn

  • 323 Postings, noch 27 bis zum nächsten Level (350)

Postings: 323

Rekursives Auslesen von Verzeichnissen und Ermitteln von geänderten Dateien

Mittwoch, 28. Juli 2004 16:30

  • 0.0/6 Votes: 0
0.0/6 Votes: 0

Am folgenden einfachen aber nützlichen Beispiel soll hier ein rekursives Aufrufen von Funktionen vorgestellt werden.
es wird eine Klasse zum Ermitteln von geänderten Dateien in einem Verzeichnis mit Unterverzeichnissen erstellt.

für unsere Klasse CDirHandler benötigen wir nur die Klassenvariable, welcher dann im Konstruktor ersteinmal als leeres Array definiert wird.

var $_aAllFiles;

// --| CONSTRUCTOR |------------
function CDirHandler(
){
$this->_aAllFiles = array();
}//CFileUpload()...

als nützliche Funktion hat sich in fast jeder Klasse eine Fehlerbehandlung erwiesen -
hier werden Fehlermeldungen mit der PHP-Funktion error-log() in eine Log-Datei geschrieben.

function setErrorLog(
$sError
){
error_log (date("j.n.Y H:i:s")." - ". $sError . "\n", 3, "dir_handler.error.log");
$this->_bError = 1;
}//setErrorLog()...

in der Funktion getFiles wird zuerst die Funktion getDirContent aufgerufen,
an Hand der im Verzeichnis vorhandenen Dateien wird dann kontrolliert ob es sich um eine Datei oder ein weiteres Verzeichnis handelt.
Dateien werden in ein Array geschrieben, falls das Datum der Datei größer als der Kontrollzeitpunkt ist
und falls es sich um ein Verzeichnis handelt ruft sich die Funktion nochmals selbst auf - fertig ist unsere Rekursion.
als Ergebnis wird ein Array zurückgegeben, welches alle Dateien enthält, die ab einem bestimmten Datum ($iLastcheck) geändert wurden.

function getFiles($sDirectory, $iLastcheck)
{
$aFile = $this->getDirContent($sDir);
foreach($aFile as $file2)
{
//ignore if filename '.' or '..'
if ($file2 != "." && $file2 != "..")
{
if(is_dir($sDir ."/". $file2))
$this->getFiles($sDir ."/". $file2, $iLastcheck);
elseif(is_file($sDir ."/". $file2))
{
if(filemtime($sDir ."/". $file2) >= $iLastcheck)
$this->_aAllFiles[] = $sDir ."/". $file2;
}
}
}
return $this->_aAllFiles;
}//getFiles()...

In dieser Funktion wird einfach der Inhalt eines Verzeichnisses ausgelesen, wenn das Verzeichnis existiert.
Im Fehlerfall wird ein Log-Eintrag über die Funktion setErrorLog() generiert.

function getDirContent($sDir)
{
$aFile = array();
if (file_exists($sDir))
{
$hDir = @opendir($sDir);
while ($file = @readdir($hDir))
$aFile[] = $file;
@closedir($hDir);
}
else
setErrorLog('File $sDir konnte nicht geöffnet werden');
return $aFile;
}//getDirContent()...

das ganze Script als Klasse gibt es hier.

Bookmark setzen!:Zu Google Bookmark hinzufügen.Zu bloglines hinzufügen.Zu Newsgator hinzufügen.Zu FURL hinzufügen.Zu DIGG hinzufügen.Zu Webnews hinzufügen.Zu Netscape hinzufügen.Zu Yahoo MyWeb hinzufügen.Zu spurl.net hinzufügen.Zu diigo hinzufügen.Zu Newsvine hinzufügen.Zu del.icio.us hinzufügen.Zu SIMPIFY hinzufügen.Zu Mister Wong hinzufügen.Zu Linkarena hinzufügen.Zu isio.de hinzufügen.Zu Oneview hinzufügen.Zu yigg.de hinzufügen.Zu reddit hinzufügen.Zu StumbleUpon hinzufügen.Zu Slashdot hinzufügen.Zu Blinklist hinzufügen.Zu Technorati hinzufügen.Zu Blogmarks hinzufügen.Zu Blinkbits hinzufügen.Zu ma.gnolia hinzufügen.Zu smarking.com hinzufügen.Zu Netvouz hinzufügen.Zu co.mments hinzufügen.Zu Connotea hinzufügen.Zu de.lirio.us hinzufügen.

Specials

Bytefresser Specials: Anno 1404

Umfrage

Welches ist Dein Lieblings-Anno?

(151 Stimmen)

1. Ganz klar: Anno 1800!
2. Anno 2205
3. Anno 2070
4. Anno 1404
5. Anno 1701
6. Anno 1503
7. Anno 1602
8. Anno Online

Benutzer-Counter

Besucher gesamt: 1.265.209
Besucher heute: 83
Besucher gestern: 86
Max. Besucher/Tag: 1.578
Gerade online: 9
Max. online: 167
Seiten gesamt: 28.896.821
Aufrufe diese Seite: 42

Tag-Cloud

  php-funktion     log-datei     klasse     log-eintrag     verzeichnissen     über     funktion     rekursives     level     fehlermeldungen     fehlerfall     postings     cfileupload     script     bookmark     ermitteln     signatur     entwicklung     @closedir     inhalt     fehlerbehandlung     @opendir     @readdir     _aallfiles     mittwoch     aufrufen     dateien     beispiel     bytefresser     auslesen