我如何递归chown?

时间:2016-05-29 14:14:09

标签: php

我想使用PHP递归更改目录的所有者。 chown函数仅适用于单个文件。

我知道我可以使用终端的以下命令:

sudo chown -R user /path/to/dir/

如何在PHP中实现相同的目标?

2 个答案:

答案 0 :(得分:2)

/**
 * Recursively chown a directory
 *
 * @param string     $dir
 * @param string|int $user
 */
function rchown($dir, $user)
{
    $dir = rtrim($dir, "/");
    if ($items = glob($dir . "/*")) {
        foreach ($items as $item) {
            if (is_dir($item)) {
                rchown($item, $user);
            } else {
                chown($item, $user);
            }
        }
    }

    chown($dir, $user);
}

答案 1 :(得分:0)

基于@littleibex 的回答,这是一个可以执行以下操作的版本:

也为文件和目录设置所有权。

设置群组所有权。

设置访问模式。

/**
 * Recursively set the owner of a path to a user
 * 
 * @param string    $path      Full path of directory
 * @param string    $group     Group owner
 * @param string    $user      User owner
 * @param string    $mode      access mode
 */
function rchown($path, $group, $user, $mode)
{
    $dir = rtrim($path, '/');
    if ($items = glob($dir . '/*')) 
    {
        foreach ($items as $item) 
        {
            if (is_dir($item)) 
            {
                (!empty($mode)) ? chmod($item, $mode) : '';
                (!empty($user)) ? chown($item, $user) : '';
                (!empty($group)) ? chgrp($item, $group) : '';
                rchown($item, $group, $user, $mode);
            } 
            else 
            {
                (!empty($mode)) ? chmod($item, $mode) : '';
                (!empty($user)) ? chown($item, $user) : '';
                (!empty($group)) ? chgrp($item, $group) : '';
            }
        }
    }
}