chown

(PHP 4, PHP 5, PHP 7, PHP 8)

chown更改文件所有者

说明

chown(string $filename, string|int $user): bool

尝试将文件 filename 的所有者更改为用户 user。只有超级用户才能更改文件的拥有者。

参数

filename

文件路径。

user

用户名或编号。

返回值

成功时返回 true,失败时返回 false

范例

范例 #1 简单 chown() 用法

<?php

// 要使用的文件名和用户名
$file_name= "foo.php";
$path = "/home/sites/php.net/public_html/sandbox/" . $file_name ;
$user_name = "root";

// 设置用户
chown($path, $user_name);

// 检查结果
$stat = stat($path);
print_r(posix_getpwuid($stat['uid']));

?>

上面的例子将输出类似以下的内容

Array
(
    [name] => root
    [passwd] => x
    [uid] => 0
    [gid] => 0
    [gecos] => root
    [dir] => /root
    [shell] => /bin/bash
)

注释

注意: 此函数不适用于 远程文件,因为要检查的文件必须通过服务器的文件系统访问。

注意: 在 Windows 上,此函数在应用于普通文件时会静默失败。

参见

添加注释

用户贡献注释 7 个注释

martijn at sigterm dot nl
21 年前
如果 chown 中填写的是变量 ( chown ("myfile", $uid) ,则会通过 pwget_uid 查询 uid。

因此,如果您需要设置一个不存在的 uid,请使用 inval($uid)。
Mikevac at yahoo dot com
16 年前
我只在 Solaris 10 上测试过,所以您的实际情况可能会有所不同。

要允许 apache 守护进程在不成为 root 的情况下更改文件所有权,请将以下行添加到 /etc/system

set rstchown=0

重启服务器。

这样做存在安全问题,因为此修改允许任何用户将其文件的拥有者更改为任何其他人。
Klaus Zierer
21 年前
如果您想 chown 符号链接,PHP 会跟踪符号链接并更改目标文件。

如果您想 chown 符号链接,则必须使用 shell_exec("/bin/chown user.group symlink");
njs+php at scifi dot squawk dot com
23 年前
如果您以这种方式允许 “nobody” (www, webdaemon, httpd, 任何 php 运行的用户) 运行 sudo 执行 chmod,那么该系统最好是能够成为 root 的系统,并且没有人能够运行代码,否则您的整个系统都会被破坏。有人可以更改 /etc/passwd 或 shadow 密码文件的模式。

其他系统命令 (sudo mount) 等等也是如此。
rickard at 0x539 dot se
15 年前
对于大多数现代 Linux 系统,您的 apache 用户不应该以 root 身份运行,并且为了更改文件或目录的所有权,您需要成为 root。为了解决这个问题,您可以使用 sudo,但要注意您赋予的权限。以下示例对我有用

www-data ALL = NOPASSWD: /bin/chown 1[1-9][0-9][0-9]\:1[1-9][0-9][0-9] /home/www/[a-zA-Z0-9]*

这允许 apache 服务器更改 /home/www 中名称包含 a-z、A-Z 或数字的文件的所有权 (注意:没有子目录)。唯一有效的用户 ID 输入是四位数的数字 ID,介于 1100 到 1999 之间。

希望这有帮助。
greg _at_ rhythmicdesign d.o.t com
20 年前
<?php
function recurse_chown_chgrp($mypath, $uid, $gid)
{
$d = opendir ($mypath) ;
while((
$file = readdir($d)) !== false) {
if (
$file != "." && $file != "..") {

$typepath = $mypath . "/" . $file ;

//print $typepath. " : " . filetype ($typepath). "<BR>" ;
if (filetype ($typepath) == 'dir') {
recurse_chown_chgrp ($typepath, $uid, $gid);
}

chown($typepath, $uid);
chgrp($typepath, $gid);

}
}

}

recurse_chown_chgrp ("uploads", "unsider", "unsider") ;
?>

对于旧版本来说.. 不幸的是,我似乎没有权限执行这些函数。
Tayfun Bilsel
18 年前
chown 的简单用法

<?php

$file_name
= "test";
$path = "/var/www/html/test/" . $file_name ;

$user_name = "root";

chown($path, $user_name);

?>
To Top