W3docs

ftp_chmod()

La fonction ftp_chmod() en PHP permet de modifier les permissions d'un fichier ou répertoire sur un serveur FTP distant.

La fonction PHP ftp_chmod()

ftp_chmod() est une fonction PHP intégrée qui modifie le mode de permission d'un fichier ou d'un répertoire sur un serveur FTP distant — l'équivalent FTP de l'exécution de chmod via un shell. Elle fait partie de l'extension FTP de PHP et s'avère utile lorsqu'un script de déploiement ou de téléversement doit rendre un fichier lisible, accessible en écriture ou exécutable sur le serveur après son transfert.

Cette page couvre la syntaxe, la signification réelle de la valeur mode, un flux de travail complet, la gestion des valeurs de retour, et les pièges courants. Si vous êtes nouveau dans l'extension FTP, commencez par ftp_connect() et ftp_login().

Syntaxe

ftp_chmod(FTP\Connection $ftp, int $permissions, string $filename): int|false

Les paramètres sont :

  • $ftp — le handle de connexion. Jusqu'à PHP 7.4, il s'agissait d'une resource retournée par ftp_connect() ; depuis PHP 8.1, c'est un objet FTP\Connection, mais son utilisation reste identique.
  • $permissions — le nouveau mode de permission sous forme d'entier octal (par exemple 0644, 0755).
  • $filename — le chemin vers le fichier ou le répertoire dont vous souhaitez modifier les permissions.

Valeur de retour : en cas de succès, la fonction renvoie les nouvelles permissions du fichier sous forme d'entier ; en cas d'échec, elle renvoie false. Comparez toujours avec === pour éviter de confondre un mode valide tel que 0 (qui est falsy) avec un échec.

Pourquoi les permissions s'écrivent en octal

Une erreur courante consiste à passer 644 au lieu de 0644. Le 0 initial indique à PHP de lire le nombre en octal, ce qui correspond à la façon dont les permissions de fichiers Unix sont exprimées.

<?php

// 0644 (octal) is NOT the same as 644 (decimal)
var_dump(0644);          // int(420)  -> the value you actually want
var_dump(644);           // int(644)  -> wrong, this is 1204 in octal

// Each digit is owner / group / others:
//   6 = read + write (4 + 2)
//   4 = read only
// So 0644 means: owner can read & write, group and others can read.

Utilisez 0644 pour les fichiers ordinaires devant être lisibles par tous mais modifiables uniquement par le propriétaire, et 0755 pour les répertoires ou les scripts exécutables.

Utilisation de base

Pour modifier les permissions, connectez-vous d'abord avec ftp_connect(), authentifiez-vous avec ftp_login(), appelez ftp_chmod(), puis libérez la connexion avec ftp_close().

<?php

// 1. Open a connection to the FTP server
$ftp = ftp_connect('ftp.example.com');

// 2. Log in with your credentials
ftp_login($ftp, 'username', 'password');

// 3. Make the file readable by all, writable by the owner
ftp_chmod($ftp, 0644, '/path/to/file.txt');

// 4. Close the connection
ftp_close($ftp);

Vérification du résultat

Étant donné que le serveur FTP peut rejeter la requête (chemin incorrect, privilèges insuffisants, ou serveur ne prenant pas en charge SITE CHMOD), vérifiez toujours la valeur de retour :

<?php

$ftp = ftp_connect('ftp.example.com');
ftp_login($ftp, 'username', 'password');

$result = ftp_chmod($ftp, 0644, '/path/to/file.txt');

if ($result === false) {
    echo "Failed to change permissions.\n";
} else {
    // $result is the new mode; printf with %o shows it back in octal
    printf("Permissions changed to %o successfully.\n", $result);
}

ftp_close($ftp);

Pour 0644, ceci affiche Permissions changed to 644 successfully. — le spécificateur de format %o reconvertit l'entier retourné en notation octale habituelle.

Pièges courants

  • ftp_chmod() n'est pas récursif. Il n'affecte qu'un seul chemin. Pour chmod toute une arborescence, vous devez lister le répertoire (voir ftp_nlist()) et appeler ftp_chmod() sur chaque entrée.
  • Tous les serveurs ne le prennent pas en charge. ftp_chmod() repose sur la commande FTP SITE CHMOD, que certains serveurs (notamment de nombreux serveurs FTP Windows IIS) n'implémentent pas. Dans ce cas, la fonction retournera simplement false.
  • Passez l'octal, pas le décimal. Comme indiqué ci-dessus, 644 et 0644 sont des nombres différents.
  • L'ordre est important. Vous devez être connecté avant d'appeler ftp_chmod() ; l'appeler sur une connexion non authentifiée échoue.

Fonctions associées

Résumé

ftp_chmod() modifie le mode de permission d'un fichier ou d'un répertoire distant via FTP. Passez le mode sous forme d'entier octal (0644, 0755), vérifiez la valeur de retour avec === par rapport à false, et n'oubliez pas que l'opération ne concerne qu'un seul chemin et dépend de la prise en charge de SITE CHMOD par le serveur.

Pratique

Pratique
Quel est l'usage de la commande FTP chmod en PHP ?
Quel est l'usage de la commande FTP chmod en PHP ?
Was this page helpful?