PHP 8.4.2 Released!

chmod

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

chmodChange le mode du fichier

Description

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

Remplace le mode du fichier filename par le mode permissions.

Liste de paramètres

filename

Chemin vers le fichier.

permissions

Il est à noter que le mode permissions est considéré comme un nombre en notation octale, aussi, afin de vous en assurer, vous pouvez préfixer le mode permissions par un zéro. Les chaînes comme "g+w" ne fonctionneront pas correctement :

<?php
chmod
("/somedir/somefile", 755); // notation décimale : probablement faux
chmod("/somedir/somefile", "u+rwx,go+rx"); // chaîne : incorrect
chmod("/somedir/somefile", 0755); // notation octale : valeur du mode correcte
?>

Le paramètre permissions est constitué de trois valeurs octales qui spécifient les droits pour le propriétaire, le groupe du propriétaire et les autres, respectivement. Chaque composant peut être calculé en ajoutant les droits désirés. Le chiffre 1 donne les droits d'exécution, le chiffre 2 les droits d'écriture et le chiffre 4 les droits de lecture. Ajoutez simplement ces nombres pour spécifier les droits voulus. Vous pouvez aussi lire le manuel des systèmes Unix avec man 1 chmod et man 2 chmod.

<?php
// Lecture et écriture pour le propriétaire, rien pour les autres
chmod("/somedir/somefile", 0600);

// Lecture et écriture pour le propriétaire, lecture pour les autres
chmod("/somedir/somefile", 0644);

// Tout pour le propriétaire, lecture et exécution pour les autres
chmod("/somedir/somefile", 0755);

// Tout pour le propriétaire, lecture exécution pour le groupe, rien pour les autres
chmod("/somedir/somefile", 0750);
?>

Valeurs de retour

Cette fonction retourne true en cas de succès ou false si une erreur survient.

Erreurs / Exceptions

En cas d'échec, une erreur E_WARNING est émis.

Notes

Note:

L'utilisateur courant est l'utilisateur avec lequel PHP fonctionne. Il est probablement différent de l'utilisateur que vous utilisez en mode Shell ou FTP. Le mode ne peut être modifié que par l'utilisateur à qui appartient le fichier sur la plupart des systèmes.

Note: Cette fonction ne fonctionne pas avec les fichiers distants, car le fichier examiné doit être accessible sur le système de fichiers du serveur.

Voir aussi

  • chown() - Change le propriétaire du fichier
  • chgrp() - Change le groupe d'un fichier
  • fileperms() - Lit les droits d'un fichier
  • stat() - Renvoie les informations à propos d'un fichier

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