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.819
Besucher heute: 407
Besucher gestern: 286
Max. Besucher/Tag: 1.578
Gerade online: 17
Max. online: 167
Seiten gesamt: 28.899.957
Aufrufe diese Seite: 42

Tag-Cloud

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