rmdir()
En PHP, la fonction rmdir() permet de supprimer un répertoire. Découvrez sa syntaxe, ses paramètres et des exemples d'utilisation dans cet article.
Introduction
En PHP, la fonction rmdir() est utilisée pour supprimer un répertoire. C'est une fonction utile pour gérer votre système de fichiers. Dans cet article, nous allons couvrir tout ce que vous devez savoir sur la fonction rmdir(), y compris sa syntaxe, ses paramètres et des exemples de son utilisation.
Comprendre la fonction rmdir()
La fonction rmdir() supprime un répertoire du système de fichiers. Il y a une règle importante à retenir : rmdir() ne supprime que les répertoires vides. Si le répertoire contient encore des fichiers ou des sous-répertoires, l'appel échoue et PHP émet un avertissement E_WARNING.
C'est intentionnel — cela vous empêche de supprimer tout un arbre d'un seul appel erroné. Pour supprimer un répertoire qui contient des fichiers, vous devez d'abord en supprimer le contenu (voir Exemple 2 ci-dessous).
Autres situations qui font échouer rmdir() et retourner false :
- Le chemin n'existe pas ou désigne un fichier plutôt qu'un répertoire.
- L'utilisateur du script ne dispose pas des permissions d'écriture/exécution sur le répertoire parent.
- Sur certains systèmes, le répertoire est le répertoire de travail courant du processus ou est autrement en cours d'utilisation.
Fonctions associées souvent utilisées avec rmdir() : mkdir() pour créer des répertoires, is_dir() pour vérifier si un chemin est un répertoire, scandir() pour lister son contenu, et unlink() pour supprimer les fichiers individuels qu'il contient.
Syntaxe de la fonction rmdir()
rmdir(string $directory, ?resource $context = null): bool| Paramètre | Description |
|---|---|
$directory | Requis. Chemin du répertoire à supprimer. |
$context | Optionnel. Une ressource de contexte de flux, utilisée principalement avec des gestionnaires de flux personnalisés. Rarement nécessaire pour les fichiers locaux. |
La fonction retourne true en cas de succès et false en cas d'échec.
Note sur le cache : PHP met en cache les résultats des vérifications du statut des fichiers. Après avoir créé ou supprimé des répertoires dans une boucle serrée, appelez
clearstatcache()avant de tester à nouveau le même chemin avecis_dir()oufile_exists(), sinon vous risquez de lire un résultat obsolète.
Exemples d'utilisation de rmdir()
Exemple 1 : Supprimer un répertoire
Cet exemple vérifie que le chemin existe avec is_dir() avant de tenter de le supprimer, et indique si l'appel a réussi :
<?php
$directory = 'example_directory';
if (is_dir($directory)) {
if (rmdir($directory)) {
echo "Directory removed successfully.";
} else {
echo "Failed to remove directory. It may not be empty or lack permissions.";
}
} else {
echo "Directory does not exist.";
}Si example_directory existe et est vide, cela affiche Directory removed successfully. L'utilisation de is_dir() comme garde permet d'éviter l'avertissement que rmdir() émettrait sinon pour un chemin manquant.
Exemple 2 : Supprimer un répertoire non vide
Parce que rmdir() refuse de supprimer un répertoire qui contient encore des fichiers, vous devez d'abord le vider. La solution idiomatique est un assistant récursif qui parcourt l'arborescence, unlink()e chaque fichier, et descend récursivement dans chaque sous-répertoire avant d'appeler finalement rmdir() sur le répertoire maintenant vide :
<?php
function removeDirectory($dir) {
if (!is_dir($dir)) {
return false;
}
$files = array_diff(scandir($dir), ['.', '..']);
foreach ($files as $file) {
$path = $dir . DIRECTORY_SEPARATOR . $file;
is_dir($path) ? removeDirectory($path) : unlink($path);
}
return rmdir($dir);
}
removeDirectory('example_directory');Ici, array_diff(scandir($dir), ['.', '..']) élimine les entrées spéciales . et .. retournées par scandir(), et DIRECTORY_SEPARATOR construit des chemins qui fonctionnent aussi bien sous Windows que sous les systèmes Unix. La fonction retourne le résultat du rmdir() final, vous pouvez donc vérifier son succès.
Conseil : La suppression récursive est destructrice et irréversible. Validez le chemin avant de l'appeler (par exemple, refusez une chaîne vide ou la racine du système de fichiers) afin qu'un bug ne puisse pas supprimer plus que prévu.
Erreurs courantes et pièges
- Tenter de supprimer un répertoire non vide. C'est la cause d'échec la plus fréquente. Videz d'abord le répertoire, ou utilisez l'assistant récursif ci-dessus.
- Ignorer la valeur de retour.
rmdir()retournefalseplutôt que de lever une exception pour la plupart des échecs (il émet un avertissement). Vérifiez toujours le résultat booléen dans le code important. - Supprimer l'avertissement avec
@.@rmdir($dir)cache le message mais pas l'échec. Préférez vérifieris_dir()et la valeur de retour à la place. - Oublier les permissions. La suppression d'un répertoire nécessite les permissions d'écriture et d'exécution sur son parent, et non sur le répertoire lui-même.
Conclusion
La fonction rmdir() offre un moyen simple de supprimer des répertoires vides en PHP. Pour supprimer un répertoire qui contient des fichiers, videz-le d'abord — généralement avec un assistant récursif combinant scandir() et unlink(). Vérifiez toujours la valeur de retour, et protégez les suppressions récursives destructrices par une vérification du chemin.
Pour aller plus loin, explorez les fonctions de répertoire associées : mkdir(), is_dir(), scandir(), et rename().