PHP: Verzeichnis rekursiv kopieren

PHP bietet leider keine Möglichkeit um ein Verzeichnis inkl. aller Unterordner an einen anderen Ort zu kopieren. Hierfür kann die folgende Methode verwendet werden:

Code:

function copyDir($sSourcePath, $sTargetPath)
{  
    if (is_dir($sSourcePath) && !is_dir($sTargetPath))
    {
        mkdir($sTargetPath, 0755);
        foreach ($oIterator = new \RecursiveIteratorIterator(
                new \RecursiveDirectoryIterator($sSourcePath, \RecursiveDirectoryIterator::SKIP_DOTS),
                \RecursiveIteratorIterator::SELF_FIRST) as $oItem)
        {
            if ($oItem->isDir())
                mkdir($sTargetPath.DIRECTORY_SEPARATOR.$oIterator->getSubPathName());
            else
                copy($oItem, $sTargetPath.DIRECTORY_SEPARATOR.$oIterator->getSubPathName());
        }
        return true;
    }
    return false;
}

PHP: Verzeichnis rekursiv kopieren weiterlesen

PHP: Einfacher FTP-Upload mit der Klasse FTPConnection

Mit der Klasse FTPConnection lassen sich einzelne Dateien, mehrere Dateien oder komplette Verzeichnisse inkl. deren Unterverzeichnisse auf einen FTP-Server laden. Über den Konstruktor werden die Verbindungsparameter des FTP-Servers definiert. Um die Dateien oder Verzeichnisse auf einen Server zu laden, können die drei Methoden uploadFile, uploadFiles oder uploadDirectory verwendet werden.

1. uploadFile – Einzelne Datei hochladen:
Mit der Methode „uploadFile“ können einzelne Dateien hochgeladen werden.

$oFTP = new FTPConnection('sklueh.de', 'username', 'password');
var_dump($oFTP->uploadFile('testfile1.txt', 'testfile1.txt')); //true

2. uploadFiles – Mehrere Dateien hochladen:
Die Methode „uploadFiles“ läd alle definierten Dateien in das gewünschte Verzeichnis auf dem FTP-Server.

$oFTP = new FTPConnection('sklueh.de', 'username', 'password');
$aFiles = array('testfile1.txt', 'testfile2.txt', 'testfile3.txt');
var_dump($oFTP->uploadFiles($aFiles, '/my_dir/sub_dir')); //true

3. uploadDirectory – Komplettes Verzeichnis inkl. aller Unterordner hochladen:
Die Methode „uploadDirectory“ läd ein komplettes Verzeichnis inklusive aller Unterverzeichnisse in das definierte Zielverzeichnis auf dem FTP-Server.

$oFTP = new FTPConnection('sklueh.de', 'username', 'password');
var_dump($oFTP->uploadDirectory('example-dir1', '/')); //true

PHP: Einfacher FTP-Upload mit der Klasse FTPConnection weiterlesen

Verzeichnis rekursiv mit PHP auslesen

Diese Methode durchläuft mit Hilfe des DirectoryIterators rekursiv das angegebene Verzeichnis und gibt die Struktur in Form eines Arrays zurück.

Code:

function iterateDir($sPath)
{
    $aRes = array();
    foreach(new DirectoryIterator($sPath) as $oItem)
    {
        if($oItem->isDir())
        {
            (!$oItem->isDot() ? $aRes[$oItem->getFilename()] = iterateDir($oItem->getPathname()):0);
            continue;
        }
        $aRes[] = $oItem->getFilename();
    } return $aRes;
}

Verzeichnis rekursiv mit PHP auslesen weiterlesen

Alle Elemente eines mehrdimensionalen Arrays durchlaufen und bearbeiten

Wenn mit den Werten eines mehrdimensionalen Arrays gearbeitet wird, dann kommen häufig Schleifen zum Einsatz. Das kann bei großen verschachtelten Arrays viel „Schreibarbeit“ bedeuten. Die PHP-Funktion „array_walk_recursive“ vereinfacht das Ganze. In dem nachfolgenden Beispiel werden alle Werte des Arrays in base64 kodiert.

Code:

$aData = array();
$aData['ebene1']            = array_fill(0, 2, 'Wert1');
$aData['ebene1']['ebene2']  = array_fill(0, 2, 'Wert2');

var_dump($aData);

/**
 * Ausgabe (vorher)
 array(1) { ["ebene1"]=> array(3)
                         {[0]=> string(5) "Wert1"
                          [1]=> string(5) "Wert1"
                          ["ebene2"]=> array(2)
                                       {[0]=> string(5) "Wert2"
                                        [1]=> string(5) "Wert2"}}
}
*/


function encodeToBase64(&$aItem, $mKey)
{
    $aItem = base64_encode($aItem);
}

array_walk_recursive($aData, "encodeToBase64");

var_dump($aData);

/*
 * Ausgabe (nachher):
array(1) { ["ebene1"]=> array(3)
                        {[0]=> string(8) "V2VydDE="
                         [1]=> string(8) "V2VydDE="
                         ["ebene2"]=> array(2)
                                      {[0]=> string(8) "V2VydDI="
                                       [1]=> string(8) "V2VydDI="}}
}
*/