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

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

rob (53)

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?

(29 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.170.902
Besucher heute: 40
Besucher gestern: 96
Max. Besucher/Tag: 900
Gerade online: 8
Max. online: 77
Seiten gesamt: 19.310.169
Aufrufe diese Seite: 511

Tag-Cloud

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