chmod

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

chmodCambia el modo del fichero

Descripción

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

Reemplaza el modo del fichero filename por el modo permissions.

Parámetros

filename

Ruta hacia el fichero.

permissions

Se debe tener en cuenta que el modo permissions es considerado como un número en notación octal, por lo que, para asegurarse, se puede prefigurar el modo permissions con un cero. Las cadenas como "g+w" no funcionarán correctamente:

<?php
chmod
("/somedir/somefile", 755); // notación decimal: probablemente incorrecto
chmod("/somedir/somefile", "u+rwx,go+rx"); // string: incorrecto
chmod("/somedir/somefile", 0755); // notación octal: valor del modo correcto
?>

El argumento permissions se compone de tres valores octales que especifican los derechos para el propietario, el grupo del propietario y los demás, respectivamente. Cada componente puede ser calculado sumando los derechos deseados. El número 1 otorga los derechos de ejecución, el número 2 los derechos de escritura y el número 4 los derechos de lectura. Simplemente sume estos números para especificar los derechos deseados. También puede leer el manual de los sistemas Unix con man 1 chmod y man 2 chmod.

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

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

// Todo para el propietario, lectura y ejecución para los demás
chmod("/somedir/somefile", 0755);

// Todo para el propietario, lectura y ejecución para el grupo, nada para los demás
chmod("/somedir/somefile", 0750);
?>

Valores devueltos

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

Errores/Excepciones

En caso de error, se emite un error E_WARNING.

Notas

Nota:

El usuario actual es el usuario con el que PHP funciona. Probablemente sea diferente del usuario que se utiliza en modo Shell o FTP. El modo solo puede ser modificado por el usuario al que pertenece el fichero en la mayoría de los 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 de un fichero
  • fileperms() - Lee los permisos de un fichero
  • stat() - Proporciona información sobre 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
15 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
5 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
20 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
16 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