如果 chown 中填写的是变量 ( chown ("myfile", $uid) ,则会通过 pwget_uid 查询 uid。
因此,如果您需要设置一个不存在的 uid,请使用 inval($uid)。
(PHP 4, PHP 5, PHP 7, PHP 8)
chown — 更改文件所有者
filename
文件路径。
user
用户名或编号。
范例 #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 )
如果 chown 中填写的是变量 ( chown ("myfile", $uid) ,则会通过 pwget_uid 查询 uid。
因此,如果您需要设置一个不存在的 uid,请使用 inval($uid)。
我只在 Solaris 10 上测试过,所以您的实际情况可能会有所不同。
要允许 apache 守护进程在不成为 root 的情况下更改文件所有权,请将以下行添加到 /etc/system
set rstchown=0
重启服务器。
这样做存在安全问题,因为此修改允许任何用户将其文件的拥有者更改为任何其他人。
如果您想 chown 符号链接,PHP 会跟踪符号链接并更改目标文件。
如果您想 chown 符号链接,则必须使用 shell_exec("/bin/chown user.group symlink");
如果您以这种方式允许 “nobody” (www, webdaemon, httpd, 任何 php 运行的用户) 运行 sudo 执行 chmod,那么该系统最好是能够成为 root 的系统,并且没有人能够运行代码,否则您的整个系统都会被破坏。有人可以更改 /etc/passwd 或 shadow 密码文件的模式。
其他系统命令 (sudo mount) 等等也是如此。
对于大多数现代 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 之间。
希望这有帮助。
<?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") ;
?>
对于旧版本来说.. 不幸的是,我似乎没有权限执行这些函数。
chown 的简单用法
<?php
$file_name= "test";
$path = "/var/www/html/test/" . $file_name ;
$user_name = "root";
chown($path, $user_name);
?>