Par exemple, j'avais un dossier appelé `Temp' et je voulais supprimer ou vider tous les fichiers de ce dossier en utilisant PHP. Est-ce que je peux le faire ?
Il existe également DirectoryIterator ou DirectoryRecursiveIterator.
Par exemple, j'avais un dossier appelé `Temp' et je voulais supprimer ou vider tous les fichiers de ce dossier en utilisant PHP. Est-ce que je peux le faire ?
$files = glob('path/to/temp/*'); // get all file names
foreach($files as $file){ // iterate files
if(is_file($file)) {
unlink($file); // delete file
}
}
Si vous voulez supprimer des fichiers "cachés" comme .htaccess, vous devez utiliser la méthode suivante
$files = glob('path/to/temp/{,.}*', GLOB_BRACE);
Bien que ce soit évident, je précise que, par exemple, "path/to/temp/*.txt" ne supprimera que les fichiers txt et ainsi de suite.
Cela fonctionne-t-il aussi pour les chemins relatifs ? Disons que le chemin complet est "/var/www/html/folder_and_files_to_delete/" et que le script de suppression est placé dans "/var/www/html/delete_folders_and_files.php". Puis-je simplement prendre "folder_and_files_to_delete" comme chemin ?
Meilleure réponse, merci. Pour éviter les notifications, je ferais également glob("...") ?: []
(PHP 5.4+) car pour un répertoire vide glob()
renvoie à false
.
Elle supprime tous les fichiers du dossier en cours, mais elle renvoie un avertissement pour les sous-dossiers et ne les supprime pas.
En combinant les réponses de Stichoza et de mojuba : array_map('unlink', ( glob( "path/to/temp/*" ) ? glob( "path/to/temp/*" ) : array() ) );
Cela devrait être unlink('/path/to/directory/'.$fileInfo->getFilename()) ; puisque unlink prend en compte le chemin. Bonne réponse cependant.
Vous pourriez même faire unlink($fileInfo->getPathname()) ; ce qui vous donnerait le chemin complet du fichier. php.net/manual/fr/directoryiterator.getpathname.php
La fonction "DirectoryIterator" ne permet-elle pas également d'itérer sur les sous-répertoires ? Si c'est le cas, 'unlink' génèrerait un avertissement dans de tels cas. Le corps de la boucle ne devrait-il pas plutôt ressembler à la réponse de Yamiko et vérifier chaque entrée si c'est un fichier avant d'appeler 'unlink' ?
Ce code de http://php.net/unlink :
/**
* Delete a file or recursively delete a directory
*
* @param string $str Path to file or directory
*/
function recursiveDelete($str) {
if (is_file($str)) {
return @unlink($str);
}
elseif (is_dir($str)) {
$scan = glob(rtrim($str,'/').'/*');
foreach($scan as $index=>$path) {
recursiveDelete($path);
}
return @rmdir($str);
}
}
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
15 votes
C'est une bonne chose que cette question ait reçu une réponse plus bas avant d'être marquée comme dupliquée. Les réponses ci-dessous sont bien meilleures que la réponse à la question liée. De plus la question est différente, cette question demande de vider un répertoire, pas de le supprimer.
1 votes
Oui, c'est une question différente qui a suscité des réponses différentes. Elle ne devrait pas être marquée comme un doublon.