递归chmod/chown/chgrp目录中的所有文件和文件夹

Ste*_*ins 7 php recursion cron file-permissions chmod

我正在建立一个建立其他网站的网站.一些如果我使用copy()来创建文件和目录,有时我在php中构建XML文件并使用DOMDocument :: save来保存它们.最终结果是具有各种混乱权限的根文件夹.我一直在修改文件和文件夹,在某种程度上说这些文字,但在使用时我特别麻烦copy().

(这是我在哪里至今http://pastebin.com/SBE8vtFX,经办人:function modPath($path))

我想采取不同的方法,并递归chmod/chown/chgrp我的文档根目录中的所有文件和文件夹一次到我的规范.

以文档根为例

/home/mysite/public_html
Run Code Online (Sandbox Code Playgroud)

并在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
Run Code Online (Sandbox Code Playgroud)

我的问题:

如何一次修改指定目录中的所有文件?我想区分目录和文件夹之间的不同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);
        }
    }

?>
Run Code Online (Sandbox Code Playgroud)

Fel*_*oni 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);
    }   
Run Code Online (Sandbox Code Playgroud)


rou*_*ier 9

您可以执行系统调用

system("/bin/chmod -R $mod $root");
system("/bin/chown -R $user $root");
system("/bin/chgrp -R $user $root");
Run Code Online (Sandbox Code Playgroud)

当然,您使用escapeshellarg()或escapeshellcmd()以避免执行任意命令