downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | conferences | my php.net

search for in the

clearstatcache> <chmod
[edit] Last updated: Fri, 07 Jun 2013

view this page in

chown

(PHP 4, PHP 5)

chownCambia el propietario del archivo

Descripción

bool chown ( string $filename , mixed $user )

Intenta cambiar el propietario del archivo filename por el usuario user. Sólo el superusuario puede cambiar el propietario de un archivo.

Parámetros

filename

Ruta del archivo.

user

Un nombre o número de usuario.

Valores devueltos

Devuelve TRUE en caso de éxito o FALSE en caso de error.

Ejemplos

Ejemplo #1 Uso sencillo de chown()

<?php

// Nombre de archivo y nombre de usuario a utilizar
$nombre_archivo"foo.php";
$ruta "/home/sites/php.net/public_html/sandbox/" $nombre_archivo ;
$nombre_usuario "root";

// Establece el usuario
chown($ruta$nombre_usuario);

// Verifica el resultado
$stat stat($ruta);
print_r(posix_getpwuid($stat['uid']));

?>

El resultado del ejemplo sería algo similar a:

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

Notas

Nota: Esta función no funcionará en ficheros remotos ya que el fichero debe ser accesible vía el sistema de ficheros del servidor para poder ser examinado.

Nota: Cuando safe mode está habilitado, PHP comprueba si los archivos o directorios que va a utilizar tienen el mismo UID (propietario) que el script que está siendo ejecutado.

Ver también

  • chmod() - Cambia el modo de archivo



clearstatcache> <chmod
[edit] Last updated: Fri, 07 Jun 2013
 
add a note add a note User Contributed Notes chown - [8 notes]
up
2
martijn at sigterm dot nl
9 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
Klaus Zierer
9 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
1
njs+php at scifi dot squawk dot com
12 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
Mikevac at yahoo dot com
5 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
-1
greg _at_ rhythmicdesign d.o.t com
9 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.
up
-1
rickard at 0x539 dot se
4 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
-2
Tayfun Bilsel
7 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
-2
Jens Vieler
8 years ago
for some reason i was searching for chown() with an "on this mashine"-unknown userid and found martijn's hint very interesting. the main problem is, that if the numerical uid is used within a variable, it is checked against the /etc/passwd and returns "unknown user". a little note:

use intval(), not inval()! so all in all it is:

   chown($path_to_dir,intval($uidnumber));

 
show source | credits | stats | sitemap | contact | advertising | mirror sites