Comment supprimer un répertoire et tout son contenu (fichiers et sous-répertoires) en PHP?
php
recursion
delete-directory
Itay Moav -Malimovka
la source
la source
Réponses:
La section fournie par l'utilisateur dans la page de manuel de
rmdir
contient une implémentation décente:la source
is_dir
deux fois pour chaque répertoire récursé. Si l'argument est un lien symbolique, il le suit également au lieu de supprimer le lien symbolique, ce qui peut ou non être ce que vous voulez. En tout cas, ce n'est pas ce quirm -rf
fait.En s'appuyant sur le commentaire du Pixel Developer , un extrait de code utilisant le SPL pourrait ressembler à:
Remarque: il ne fait aucune vérification de cohérence et utilise l'indicateur SKIP_DOTS introduit avec le FilesystemIterator dans PHP 5.3.0. Bien sûr, le
$todo
pourrait être unif
/else
. Le point important est qu'ilCHILD_FIRST
est utilisé pour parcourir les enfants (fichiers) avant leur parent (dossiers).la source
SKIP_DOTS
n'a été introduit qu'en PHP 5.3? Où avez-vous vu ça?getPathname()
méthode au lieu degetRealPath()
?rmdir($dir)
à la fin du script.rmdir()
etunlink()
, par exemple abandonne avecE_WARNING
et retournetrue
oufalse
indique le succès.FilesystemIterator
n'est pas un itérateur récursif.Supprime tous les fichiers et dossiers du chemin.
la source
rm -rf /
==recurseRmdir('/')
:)is_dir("$dir/$file")
pouris_dir("$dir/$file") && !is_link("$dir/$file")
Pour * nix, vous pouvez utiliser un
shell_exec
pourrm -R
ouDEL /S folder_name
pour Windows.la source
DEL /S folder_name
pour WindowsRMDIR /S /Q folder_name
est ce qui a fonctionné pour moiexec('rm -rf ' . __DIR__ . '/output/*.log');
la source
Il y a un autre fil avec plus d'exemples ici: Une fonction de suppression de répertoire récursive pour PHP?
Si vous utilisez Yii, vous pouvez le laisser au framework:
la source
code `` simple '' qui fonctionne et peut être lu par un enfant de dix ans:
Veuillez noter que tout ce que j'ai fait était de développer / simplifier et corriger (ne fonctionnait pas pour les répertoires non vides) la solution ici: En PHP, comment supprimer récursivement tous les dossiers qui ne sont pas vides?
la source
Solution améliorée de @Artefacto - fautes de frappe corrigées et code simplifié, fonctionnant à la fois pour les répertoires vides et non vides.
la source
La solution 100% fonctionnelle
la source
Quelque chose comme ça?
la source
Exemple avec la fonction glob () . Il supprimera tous les fichiers et dossiers de manière récursive, y compris les fichiers commençant par un point.
la source
system('rm -fr folder')
La fonction unlinkr supprime récursivement tous les dossiers et fichiers dans un chemin donné en s'assurant qu'elle ne supprime pas le script lui-même.
si vous souhaitez supprimer tous les fichiers et dossiers où vous placez ce script, appelez-le comme suit
si vous voulez simplement supprimer uniquement les fichiers php, appelez-le comme suit
vous pouvez également utiliser n'importe quel autre chemin pour supprimer les fichiers
Cela supprimera tous les fichiers du répertoire home / user / temp.
la source
J'utilise ce code ...
ou celui-ci ...
la source
Une fois les tests terminés, supprimez simplement # de la #unlink et #rmdir dans la classe.
la source
cleanup.php:
la source
Il semble que toutes les autres réponses supposent que le chemin donné à la fonction est toujours un répertoire. Cette variante fonctionne pour supprimer des répertoires ainsi que des fichiers uniques:
la source
Utilisation correcte de DirectoryIterator et de la récursivité:
la source
Je viens de créer ce code, à partir de discussions sur StackOverflow. Je n'ai pas encore testé sur l'environnement Linux. Il est fait afin de supprimer complètement un fichier ou un répertoire:
la source
la source
Variante modifiée de la solution @XzaR. Il supprime les dossiers vides lorsque tous les fichiers en sont supprimés et lève des exceptions au lieu de renvoyer false en cas d'erreurs.
la source
la source
unlink
,rmdir
) leopendir
+readdir
fonctionne plus vitescandir
etRecursiveDirectoryIterator
utilise également moins de mémoire que tout. Pour supprimer le dossier que je dois d'closedir
abord, j'étais coincé à cela. Merci à cette réponse.