W3docs

chmod()

chmod() est une fonction PHP pour modifier le mode d'un fichier ou dossier. Elle contrôle les permissions d'accès en lecture, écriture et exécution.

Comprendre la fonction PHP chmod()

chmod() modifie le mode (les bits de permission) d'un fichier ou d'un répertoire sur un système de fichiers de type Unix. Le mode contrôle qui peut faire quoi avec le fichier : lire son contenu, y écrire ou l'exécuter. Définir correctement les permissions est essentiel pour la sécurité — trop permissives et n'importe qui peut lire ou écraser des données sensibles ; trop restrictives et votre serveur web ne peut pas lire les fichiers qu'il doit servir.

Cette page couvre la syntaxe, comment lire et écrire le mode octal, les valeurs de permission les plus courantes, la valeur de retour, et les pièges qui font trébucher les développeurs (le zéro initial, umask, et Windows).

Syntaxe

chmod(string $filename, int $permissions): bool
ParamètreDescription
$filenameChemin vers le fichier ou le répertoire dont vous souhaitez modifier les permissions.
$permissionsLe nouveau mode, sous forme d'entier octal (par exemple 0644).

La fonction retourne true en cas de succès et false en cas d'échec.

Comment fonctionne le mode octal

Le mode est un nombre octal à trois chiffres. Chaque chiffre décrit une classe d'utilisateurs :

Position du chiffreS'applique à
1er (ex. 644)Propriétaire du fichier
2ème (ex. 644)Groupe
3ème (ex. 644)Autres (tout le monde)

Chaque chiffre est la somme des permissions accordées à cette classe :

ValeurPermission
4Lecture
2Écriture
1Exécution
0Aucune

Additionnez-les : lecture + écriture = 4 + 2 = 6, et lecture + exécution = 4 + 1 = 5. Ainsi, 0750 signifie propriétaire : lecture/écriture/exécution (7), groupe : lecture/exécution (5), autres : rien (0).

Avertissement

En PHP, le mode doit être écrit avec un 0 initial pour être interprété comme octal. chmod("file.txt", 644) transmet le nombre décimal 644, qui correspond à la valeur octale 1204 — ce n'est presque certainement pas ce que vous souhaitez. Écrivez toujours 0644.

Valeurs de permission courantes

ModePropriétaireGroupeAutresUtilisation typique
0644lecture/écriturelecturelectureFichiers ordinaires (HTML, images, config lue par le serveur)
0600lecture/écritureFichiers privés (identifiants, clés)
0755lecture/écriture/exécutionlecture/exécutionlecture/exécutionRépertoires et scripts exécutables
0700lecture/écriture/exécutionRépertoires privés
0777touttouttoutRarement une bonne idée — n'importe qui peut lire et écraser

Exemples

Définir les permissions d'un fichier

Le mode 0644 permet au propriétaire de lire et d'écrire, tandis que le groupe et les autres ne peuvent que lire :

<?php
if (chmod("example.txt", 0644)) {
    echo "Permissions updated.";
} else {
    echo "Failed to change permissions.";
}

Rendre un script exécutable

Pour exécuter directement un script PHP (par exemple une tâche cron en ligne de commande), le propriétaire a besoin de la permission d'exécution :

<?php
chmod("backup.php", 0744); // owner: rwx, group & others: read only

Toujours vérifier la valeur de retour

chmod() échoue silencieusement en retournant false — par exemple quand le script ne possède pas le fichier. Ne supposez pas que l'appel a réussi :

<?php
$file = "config.ini";
if (!chmod($file, 0600)) {
    error_log("Could not secure {$file}");
}

Pièges à éviter

  • La propriété compte. Un processus ne peut faire chmod() que sur un fichier dont il est propriétaire (ou en tant que superutilisateur). Sur un hébergement mutualisé, l'utilisateur du serveur web n'est souvent pas le propriétaire, donc l'appel retourne false.
  • umask n'affecte pas chmod(). Contrairement à mkdir() et à la création de fichiers, chmod() définit exactement le mode demandé. umask ne s'applique qu'aux fichiers nouvellement créés — voir umask().
  • Windows ignore la plupart des bits. NTFS n'a pas de modèle de permission Unix, donc sous Windows seul le bit lecture seule est significativement affecté.
  • Vérifiez avant de modifier. Utilisez is_writable() pour tester l'accès, et fileperms() pour lire le mode actuel avant de l'écraser.

Fonctions associées

  • fileperms() — lire les bits de permission actuels d'un fichier.
  • is_writable() — tester si le script peut écrire dans un chemin.
  • umask() — définir le masque par défaut appliqué aux fichiers nouvellement créés.
  • mkdir() — créer un répertoire avec un mode donné.

Conclusion

chmod() est votre outil pour renforcer ou assouplir l'accès aux fichiers et répertoires depuis PHP. Retenez les trois règles qui évitent la plupart des bugs : écrivez le mode en octal avec un zéro initial, choisissez la permission minimale qui fonctionne encore (0644 pour les fichiers, 0755 pour les répertoires), et vérifiez la valeur de retour car la fonction échoue silencieusement quand votre script ne possède pas la cible.

Pratique

Pratique
Que fait la fonction chmod en PHP ?
Que fait la fonction chmod en PHP ?
Was this page helpful?