chmod

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

chmodCambia le impostazioni del file

Descrizione

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

Tenta di cambiare le impostazioni del file specificato in quelle date in mode.

Elenco dei parametri

filename

Percorso del file.

mode

Si osservi che mode non viene automaticamente assunto come valore ottale, quindi per ottenere l'operazione desiderata, è necessario far precedere mode da uno zero (0). Le stringhe come "g+w" non verranno elaborate correttamente.

<?php
chmod
("/somedir/somefile", 755); // decimale; probabilmente errato
chmod("/somedir/somefile", "u+rwx,go+rx"); // stringa; errato
chmod("/somedir/somefile", 0755); // ottale; valore corretto di mode
?>

Il parametro mode consiste in tre numeri ottali costituenti le restrizioni dell'accesso per il proprietario, il gruppo utente a cui appartiene il proprietario, e gli altri utenti, nell'ordine dato. Ciascun numero può essere calcolato aggiungendo i permessi necessari per quel bacino di utenti di destinazione. Il numero 1 indica che si abilita all'esecuzione del file, con il numero 2 si assegnano i permessi di scrittura, con il numero 4 si assegna il permesso di lettura del file. Sommare questi numeri per ottenere i permessi richiesti. Si possono avere maggiori dettagli sui permessi dei sistemi Unix usando il comando 'man 1 chmod' e 'man 2 chmod'.

<?php
// Lettura e scrittura per il proprietario, e nessun permesso per tutti gli altri
chmod("/somedir/somefile", 0600);

// Lettura e scrittura per il proprietario, e lettura per tutti gli altri
chmod("/somedir/somefile", 0644);

// Accesso completo per il proprietario, e lettura ed esecuzione per gli altri
chmod("/somedir/somefile", 0755);

// Accesso completo per il proprietario, e lettura ed esecuzione per il gruppo del proprietario
chmod("/somedir/somefile", 0750);
?>

Valori restituiti

Restituisce true in caso di successo, false in caso di fallimento.

Note

Nota:

L'utente corrente è l'utente con il quale viene eseguito PHP. Probabilmente non è lo stesso utente che si usa per la shell normale o per l'accesso FTP. Il mode può essere cambiato solo dall'utente che possiede il file sulla maggior parte dei sistemi.

Nota: Questa funzione non opererà su file remoti perché il file che deve essere esaminato deve essere accessibile attraverso il filesysmte del server.

Vedere anche:

  • chown() - Cambia il proprietario del file
  • chgrp() - Cambia il gruppo del file
  • fileperms() - Restituisce i permessi sui file
  • stat() - Da informazioni su un file

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