Mehrere Dateien in FTP-Verzeichnis auslesen und in PHP-Variable schreiben

on

Im Folgenden zeige ich euch, wie man mehrere Textdateien gleichzeitig aus einem Ordner auf einem FTP-Server durch PHP ausliest und in eine Variable speichert. Dabei sollen nur Textdateien berücksichtigt werden. Zusätzlich dürfen ebenfalls nur Dateien ausgelesen werden, welche ein bestimmtes Änderungsdatum aufweist. Eine praktische Anwendung kann unter anderem das Zusammenführen mehrerer einzelner Logfiles sein.

Als erstes bauen wir eine Verbindung zum FTP-Server auf:

$data       = "";

$ftp_server = "ftpserverxyz.de";
$ftp_user   = "anonymous";
$ftp_pass   = "anonymous";

//Mit FTP verbinden
$conn_id = ftp_connect($ftp_server);

// Login mit Username und Passwort
if(!($login_result = ftp_login($conn_id, $ftp_user, $ftp_pass))) {
    ftp_close($conn_id);
    return;
}

// Schalte passiven Modus ein
ftp_pasv($conn_id, true);

Als nächstes wechseln wir das Verzeichnis auf dem FTP-Server, wo sich unsere Dateien befinden:

// Nach Verzeichnis .... wechseln
ftp_chdir($conn_id, "verzeichnis/auf/dem/server/");

Über die PHP-Funktion ftp_nlist werden alle Dateien im gewählten Verzeichnis aufgelistet. Über das zweite Argument können die Dateien gefiltert werden. In unserem Fall sollen nur Textdateien mit einer Endung .txt herangezogen werden.

$ftp_nlist_root = ftp_nlist($conn_id, "*.txt");

Für das spätere Selektieren der Dateien nach einem bestimmten Alter der Datei geben wir einen Zeitraum von einer Stunde an:

$timerange = time() - (60*60);

Zum Schluss der wichtigste Teil des Quelltextes: Die Foreach-Schleife durchläuft jedes Arrayelement (gleichbedeutend mit jedem Dateieintrag) aus der Variable $ftp_nlist_root und prüft das Änderungsdatum der Datei. Wenn es innerhalb der angegebenen letzten Stunde ist, dann wird es für die Ausgabe berücksichtigt und per ftp_get als Stream in die Variable $data hinzugefügt.

foreach ($ftp_nlist_root as $file) {
    $mod = ftp_mdtm($conn_id, $file);

    if ($mod >= $timerange) {
        ob_start();
        $result  = ftp_get($conn_id, "php://output", $file, FTP_ASCII);
        $data   .= ob_get_contents();
        ob_end_clean();
    }
}

ftp_close($conn_id);

Zusammenfassend nachfolgend noch einmal der komplette Quelltext für diese Anforderung:

<?php
$data       = "";

$ftp_server = "ftpserverxyz.de";
$ftp_user   = "anonymous";
$ftp_pass   = "anonymous";

//Mit FTP verbinden
$conn_id = ftp_connect($ftp_server);

// Login mit Username und Passwort
if(!($login_result = ftp_login($conn_id, $ftp_user, $ftp_pass))) {
    ftp_close($conn_id);
    return;
}

// Schalte passiven Modus ein
ftp_pasv($conn_id, true);

// Nach Verzeichnis .... wechseln
ftp_chdir($conn_id, "verzeichnis/auf/dem/server/");

//Liste alle Dateien auf, welche eine Dateiendung .txt besitzen
$ftp_nlist_root = ftp_nlist($conn_id, "*.txt");

//Sortiere Array
$timerange = time() - (60*60);

foreach ($ftp_nlist_root as $file) {
    $mod = ftp_mdtm($conn_id, $file);

    if ($mod >= $timerange) {
        ob_start();
        $result  = ftp_get($conn_id, "php://output", $file, FTP_ASCII);
        $data   .= ob_get_contents();
        ob_end_clean();
    }
}

ftp_close($conn_id);
?>

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.