我正在建立其他网站的网站。有些我使用copy()创建文件和目录,有时我在php中构建XML文件并使用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);
}
}
?>
答案 0 :(得分:11)
这应该会有所帮助。 编辑:纠正了一些语法错误
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);
}
答案 1 :(得分:9)
您可以执行系统调用
system("/bin/chmod -R $mod $root");
system("/bin/chown -R $user $root");
system("/bin/chgrp -R $user $root");
当然你使用escapeshellarg()或escapeshellcmd() 为了避免执行任意命令
答案 2 :(得分:0)
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表示您将模式传递为十进制。首先转换为八进制字符串。