Я работаю над сайтом, который строит другие сайты. Некоторые, если я использую 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 означает, что вы передали свой режим как десятичный. Сначала конвертируйте в восьмеричную строку.