PHP 8.4.2 Released!

chmod

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

chmodCambia el modo de un fichero

Descripción

chmod(string $filename, int $mode): bool

Intenta cambiar el modo de un fichero especificado por el dado en mode.

Parámetros

filename

Ruta del fichero.

mode

Observe que no se asume que mode sea automáticamente un valor octal, por lo que, para asegurarse de que la operación sea la esperada, es necesario prefijar mode con un cero (0). String tales como "g+w" no funcionarán adecuadamente.

<?php
chmod
("/directorio/fichero", 755); // decimal; probablemente incorrecto
chmod("/directorio/fichero", "u+rwx,go+rx"); // string; incorrecto
chmod("/directorio/fichero", 0755); // octal; valor de modo correcto
?>

El parámetro mode consiste en tres componentes numéricos octales que especifican las restricciones de acceso para el propietario, el grupo de usuarios al que pertenece el propietario, y para todos los demás, en este orden. Un componente puede ser computado sumando los permisos necesarios para ese usuario objetivo base. El número 1 significa que se conceden derechos de ejecución, el número 2 significa que se puede escribir en el fichero, el número 4 significa que el fichero se puede leer. Sume estos números para especificar los derechos necesarios. Se puede leer más sobre los modos en sistemas Unix con 'man 1 chmod' y 'man 2 chmod'.

<?php
// Lectura y escritura para el propietario, nada para los demás
chmod("/directorio/fichero", 0600);

// Lectura y escritura para el propietario, lectura para los demás
chmod("/directorio/fichero", 0644);

// Todo para el propietario, lectura y ejecución para los otros
chmod("/directorio/fichero", 0755);

// Todo para el propietario, lectura y ejecución para el grupo del propietario
chmod("/directorio/fichero", 0750);
?>

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Notas

Nota:

El usuario actual es el usuario bajo el que se ejecuta PHP. Probablemente no sea el mismo usuario que se utilize para el intérprete de comandos normal o el acceso FTP. EL modo puede ser cambiado sólo por el usuario al que pertenece el fichero en la mayoría de sistemas.

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.

Ver también

  • chown() - Cambia el propietario del fichero
  • chgrp() - Cambia el grupo del archivo
  • fileperms() - Obtiene los permisos de un fichero
  • stat() - Da información acerca de un fichero

add a note

User Contributed Notes 6 notes

up
58
MethodicalFool
14 years ago
BEWARE, a couple of the examples in the comments suggest doing something like this:

chmod(file_or_dir_name, intval($mode, 8));

However, if $mode is an integer then intval( ) won't modify it. So, this code...

$mode = 644;
chmod('/tmp/test', intval($mode, 8));

...produces permissions that look like this:

1--w----r-T

Instead, use octdec( ), like this:

chmod(file_or_dir_name, octdec($mode));

See also: http://www.php.net/manual/en/function.octdec.php
up
38
Geoff W
14 years ago
BEWARE using quotes around the second parameter...

If you use quotes eg

chmod (file, "0644");

php will not complain but will do an implicit conversion to an int before running chmod. Unfortunately the implicit conversion doesn't take into account the octal string so you end up with an integer version 644, which is 1204 octal
up
36
masha at mail dot ru
19 years ago
Usefull reference:

Value Permission Level
400 Owner Read
200 Owner Write
100 Owner Execute
40 Group Read
20 Group Write
10 Group Execute
4 Global Read
2 Global Write
1 Global Execute

(taken from http://www.onlamp.com/pub/a/php/2003/02/06/php_foundations.html)
up
8
chris at ocproducts dot com
4 years ago
Windows has a very different file permission model to Unix and integrates them only minimally.

On Windows, all this function can do is to change the "read only" flag, which is turned on if $mode & 0200 does not pass.
i.e. it only checks if u+w is missing from the bitmask, and if it is, it sets the read only flag.

The executable flag cannot be set as Windows determines it based on file extension.
The write flag cannot be set as Windows determines write access based on ACLs, which are not integrated here.
up
6
alex at feidesign dot com
19 years ago
If you cannot chmod files/directories with PHP because of safe_mode restrictions, but you can use FTP to chmod them, simply use PHP's FTP-functions (eg. ftp_chmod or ftp_site) instead. Not as efficient, but works.
up
2
sander
15 years ago
if you want to chmod directories too, use this

<?php
$iterator
= new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathname), RecursiveIteratorIterator::SELF_FIRST);

foreach(
$iterator as $item) {
chmod($item, $filemode);
}
?>
To Top