我想使用PHP递归更改目录的所有者。 chown
函数仅适用于单个文件。
我知道我可以使用终端的以下命令:
sudo chown -R user /path/to/dir/
如何在PHP中实现相同的目标?
答案 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) : '';
}
}
}
}