(PHP 4, PHP 5, PHP 7, PHP 8)
chmod — Cambia el modo del fichero
Reemplaza el modo del fichero filename
por el modo permissions.
filenameRuta 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);
?>
En caso de error, se emite un error E_WARNING .
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 funciona con los archivos remotos, ya que el archivo examinado debe ser accesible en el sistema de archivos del servidor.
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 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 octalUsefull 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)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.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.