LaravelConf Taiwan 2020 CFP Started

chown

(PHP 4, PHP 5, PHP 7)

chownИзменяет владельца файла

Описание

chown ( string $filename , mixed $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
)

Примечания

Замечание: Эта функция неприменима для работы с удаленными файлами, поскольку файл должен быть доступен через файловую систему сервера.

Замечание: Когда опция safe mode включена, PHP проверяет, имеют ли файлы/каталоги, с которыми вы собираетесь работать, такой же UID (владельца), как и выполняемый скрипт.

Замечание: В Windows функция молча завершается ошибкой при применении к обычному файлу.

Смотрите также

  • chmod() - Изменяет режим доступа к файлу
  • chgrp() - Изменяет группу файла

add a note add a note

User Contributed Notes 7 notes

up
4
martijn at sigterm dot nl
16 years ago
If chown is filled with a variable (  chown ("myfile", $uid) the uid will be looked up through pwget_uid.

So if you need to set a non existing uid use inval($uid).
up
1
njs+php at scifi dot squawk dot com
19 years ago
If you allow sudo execution for chmod by "nobody" (www, webdaemon, httpd, whatever user php is running under)in this manner, it had better be a system on which the owner is able to be root and no one else can run code, else your whole system is compromised.  Someone could change the mode of /etc/passwd or the shadow password file.

Other system commands (sudo mount) and so forth are similar.
up
0
Klaus Zierer
16 years ago
If you want to chown a symlink, PHP will follow the symlink and change the target file.

If you want to chown the symlink, you have to use shell_exec("/bin/chown user.group symlink");
up
-2
Mikevac at yahoo dot com
12 years ago
I've only tested this on Solaris 10 so your mileage may vary.

To allow the apache daemon to change file ownership without being root, add the following line to /etc/system:

set rstchown=0

Reboot the server.

There are security concerns doing this as this modification allows any user to change ownership of their files to anyone else.
up
-4
rickard at 0x539 dot se
10 years ago
For most modern Linux systems your apache user should not be run as root, and in order to change the ownership of a file or directory, you need to be root. To get around this problem you can use sudo, but be careful with what permissions you give. Here is an example which is working for me:

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]*

This allows the apache server to change ownership of files in /home/www with name containing a-z, A-Z or numbers (note: no subdirectories). The only valid input of userid is a four digit numeric id, between 1100 and 1999.

Hope this helps.
up
-8
Tayfun Bilsel
14 years ago
Simple usage of the chown:

<?php

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

$user_name = "root";

chown($path, $user_name);

?>
up
-10
greg _at_ rhythmicdesign d.o.t com
16 years ago
<?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") ;
?>

for older versions.. unfortunately, it seems I do not have permission to perform these functions.
To Top