$file){ // Si c'est . ou .., on passe au suivant if( $file == '.' || $file == '..' ){ unset($content[$i]); continue; } // Sinon, on lance recursivement chmodR( implode('/', array_merge(explode('/', $dirOrFile), [$file])), $chmod, $chown ); } } } /* APPLIQUE LES DROITS SUR UN DOSSIER EN FONCTION DE LA CONFIG * */ function applyPermissions($parent, $children, $permissions){ /* [0] Si une permission est définie, on l'applique =========================================================*/ /* (0) Si la permission existe et est référencée */ if( isset($children['permissions']) && isset($permissions[$children['permissions']]) ){ // On récupère les permissions $permission = $permissions[$children['permissions']]; /* (1) Valeur par défaut des propriétaires si n'est pas défini */ if( !isset($permission['chown']) ) $permission['chown'] = null; /* (2) Valeur par défaut des droits si n'est pas défini */ if( !isset($permission['chmod']) ) $permission['chmod'] = null; /* (3) Gestion du .htaccess, si défini et si un dossier */ if( isset($permission['.htaccess']) && is_dir($parent) ){ echo 'creating '."$parent/.htaccess\n"; $fht = fopen("$parent/.htaccess", 'w'); fwrite($fht, $permission['.htaccess']); fclose($fht); /* (4) On applique les permissions sur le .htaccess (par défaut depuis config) */ chmodR("$parent/.htaccess", $permissions['.htaccess']['chmod'], $permissions['.htaccess']['chown']); } /* (5) On retire les permissions de la liste des enfants pour la suite */ unset($children['permissions']); } /* [1] Pour chaque enfant, s'il y en a =========================================================*/ /* (1) On lance récursivement sur tous les enfants */ if( is_array($children) ) foreach($children as $child=>$subChildren) applyPermissions("$parent/$child", $subChildren, $permissions); } /* [1] On charge la configuration =========================================================*/ $config = loadConfig(); // Si erreur de configuration if( is_null($config) ){ echo 'Config error'; exit(); } /* [2] Gestion de 'umask' si défini =========================================================*/ chdir($config['root']); if( isset($config['umask']) ) umask( decoct($config['umask']) ); /* [3] On traite toute l'arborescence =========================================================*/ applyPermissions($config['root'], $config['files'], $config['permissions']); ?>