Blog


Verzeichnis rekursiv mit Rechten anlegen

  • 20.03.2017
  • PHP
  • Verzeichnis
  • Rechte
  • mkdir
In PHP kann mit mkdir ein Verzeichnis angelegt werden.
mkdir(string $pathname [, int $mode = 0777 [, bool $recursive = false ]] )
Wobei als 2. Parameter die Rechte angeben werden können und als 3. Parameter, ob das Anlegen rekursiv erfolgen soll. Leider funktioniert das Vergeben der Rechte rekursiv nicht. Auf php.net wird zwar das rekursive Anlegen der Verzeichnisse und das Vergeben der Rechte diskutiert, leider fehlt aber die Funktion, die beide Punkte (Rechte + Rekursion) abdeckt. Hierzu die kleine PHP-Funktion createDirRecursive, welche beide Funktionen vereint.
/**
* create directory recursive
*
* @param string $dirName dirs to create
* @param int $rights rights to set
*/
function createDirRecursive($dirName, $rights=0777)
{
$dirs = explode('/', $dirName);
$dir = '';
foreach($dirs as $part)
{
$dir .= $part .'/';
if(!is_dir($dir) && mb_strlen($dir) > 0)
{
$oldmask = umask(0);
mkdir($dir, $rights);
umask($oldmask);
}
}
}
Die Funktion arbeitet mit relativen und absoluten Pfaden. Des Weiteren wird vor dem Anlegen überprüft, ob das Verzeichnis schon existiert.

Beispiel:
$path = '/var/www/html/website/cache/';
createDirRecursive($path);
Das Verzeichnis /var/www/html/website existiert bereits, d.h. in diesem Fall muss nur der Ordner cache angelegt werden. Es wird beginnend von /var überprüft, ob das Verzeichnis vorhanden ist und falls JA, die nächste Ebene überprüft. Da der Ordner cache noch nicht angelegt worden ist, wird dieser mit der Funktion angelegt und die Berechtigung 0777 vergeben.