Рекурсивно chmod / chown / chgrp все файлы и папки в каталоге

Я работаю над сайтом, который строит другие сайты. Некоторые, если я использую copy () для создания файлов и каталогов, иногда я создаю файлы XML в php и используя DOMDocument :: save для их сохранения. Конечным результатом является корневая папка со всеми видами перепутанных разрешений. Я ходил по моддингу с файлами и папками по мере того, как я шел, какие слова до некоторой степени, но у меня особенно возникают проблемы, когда дело доходит до использования copy() .

(Вот где я до сих пор http://pastebin.com/SBE8vtFX , attn: function modPath($path) )

Я хочу использовать другой подход и рекурсивно chmod / chown / chgrp все файлы и папки в моем корневом каталоге документа для моих спецификаций сразу .

Возьмем, к примеру, корень документа

 /home/mysite/public_html 

и внутри public_html меня есть

 -rwxrwxrwx 1 mysite mysite 348 Aug 31 10:49 index.php d--------x 5 root root 4096 Aug 30 10:21 folder1 drwxrwxrwx 2 mysite mysite 4096 Aug 30 09:41 folder2 

Мой вопрос:

Как я могу обменивать все файлы в указанном каталоге сразу? Я хочу различать различные настройки chmod между каталогами и папками. Это должно быть PHP-решение.

Это насколько я могу получить

 <?php function modAll($root) { $aPath = explode("/", $root); $user = $aPath[2]; /* Some sort of looping through $root */ { $mod = (is_dir($thisfileorfolder) ? 0755 : 0644); chmod($thisfileorfolder, $mod); chown($thisfileorfolder, $user); chgrp($thisfileorfolder, $user); } } ?> 

Это должно быть полезно. EDITED: исправлены некоторые синтаксические ошибки

  function fsmodify($obj) { $chunks = explode('/', $obj); chmod($obj, is_dir($obj) ? 0755 : 0644); chown($obj, $chunks[2]); chgrp($obj, $chunks[2]); } function fsmodifyr($dir) { if($objs = glob($dir."/*")) { foreach($objs as $obj) { fsmodify($obj); if(is_dir($obj)) fsmodifyr($obj); } } return fsmodify($dir); } 

Вы можете выполнить системный вызов

 system("/bin/chmod -R $mod $root"); system("/bin/chown -R $user $root"); system("/bin/chgrp -R $user $root"); 

конечно, вы используете escapeshellarg () или escapeshellcmd (), чтобы избежать выполнения произвольных команд

 system("/bin/chmod -R $mod $root"); system("/usr/bin/find -type d $root -print0 | xargs -0 | /bin/chmod $moddir"); system("/bin/chown -R $user $root"); system("/bin/chgrp -R $user $root"); 

Недопустимый режим 493 означает, что вы передали свой режим как десятичный. Сначала конвертируйте в восьмеричную строку.