PHP: Recursively chmod(), chown() and chgrp()
I recently needed a way to recursively modify file permissions. I was able to accomplish this with a few basic recursive functions, chmodr(), chownr() and chgrpr():
chmodr()
function chmodr($path, $filemode) { if (!is_dir($path)) return chmod($path, $filemode); $dh = opendir($path); while (($file = readdir($dh)) !== false) { if($file != '.' && $file != '..') { $fullpath = $path.'/'.$file; if(is_link($fullpath)) return FALSE; elseif(!is_dir($fullpath) && !chmod($fullpath, $filemode)) return FALSE; elseif(!chmodr($fullpath, $filemode)) return FALSE; } } closedir($dh); if(chmod($path, $filemode)) return TRUE; else return FALSE; }
chownr()
function chownr($path, $owner) { if (!is_dir($path)) return chown($path, $owner); $dh = opendir($path); while (($file = readdir($dh)) !== false) { if($file != '.' && $file != '..') { $fullpath = $path.'/'.$file; if(is_link($fullpath)) return FALSE; elseif(!is_dir($fullpath) && !chown($fullpath, $owner)) return FALSE; elseif(!chownr($fullpath, $owner)) return FALSE; } } closedir($dh); if(chown($path, $owner)) return TRUE; else return FALSE; }
chgrpr()
function chgrpr($path, $group) { if (!is_dir($path)) return chgrp($path, $group); $dh = opendir($path); while (($file = readdir($dh)) !== false) { if($file != '.' && $file != '..') { $fullpath = $path.'/'.$file; if(is_link($fullpath)) return FALSE; elseif(!is_dir($fullpath) && !chgrp($fullpath, $group)) return FALSE; elseif(!chgrpr($fullpath, $group)) return FALSE; } } closedir($dh); if(chgrp($path, $group)) return TRUE; else return FALSE; }























