Je dois supprimer un dossier avec le contenu en utilisant PHP. rmdir()
et unlink()
supprime les dossiers vides, mais ne peut pas supprimer les dossiers contenant des contenus.Comment faire pour supprimer un dossier avec le contenu en utilisant PHP
Répondre
Cette fonction vous permet de supprimer un dossier (aussi longtemps qu'il est inscriptible) et il est des fichiers et des sous-répertoires.
function Delete($path)
{
if (is_dir($path) === true)
{
$files = array_diff(scandir($path), array('.', '..'));
foreach ($files as $file)
{
Delete(realpath($path) . '/' . $file);
}
return rmdir($path);
}
else if (is_file($path) === true)
{
return unlink($path);
}
return false;
}
ou sans récursivité en utilisant RecursiveDirectoryIterator
:
function Delete($path)
{
if (is_dir($path) === true)
{
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($files as $file)
{
if (in_array($file->getBasename(), array('.', '..')) !== true)
{
if ($file->isDir() === true)
{
rmdir($file->getPathName());
}
else if (($file->isFile() === true) || ($file->isLink() === true))
{
unlink($file->getPathname());
}
}
}
return rmdir($path);
}
else if ((is_file($path) === true) || (is_link($path) === true))
{
return unlink($path);
}
return false;
}
Great method, man . J'utilisais la commande très simple: Php system ("rm -r RESOURCE_PATH"); ?>, mais malheureusement certains serveurs n'autorisent pas la commande système, donc la vôtre (j'ai choisi la première) est une substitution très bonne et simple. Merci frere. –
Est-ce que cela fonctionne également pour les chemins relatifs? Supposons que le chemin complet soit "/ var/www/html/folder_and_files_to_delete /" et que le script de suppression soit placé dans "/var/www/html/delete_folders_and_files.php". Puis-je simplement prendre "folder_and_files_to_delete" comme chemin? – yoano
Comme, meilleure réponse – mghhgm
Vous devez parcourir le contenu du dossier (y compris le contenu de tous les sous-dossiers) et les supprimer en premier.
Il y a un exemple: http://lixlpixel.org/recursive_function/php/recursive_directory_delete/
Soyez prudent avec lui !!!
Vous devrez supprimer tous les fichiers de manière récursive. Il y a des fonctions par exemple abondance dans les commentaires de la page de manuel rmdir
:
J'espère que rmdir supprimera seulement le dossier qui n'a pas de contenu. S'il contient du contenu, il ne supprimera pas le dossier. – Fero
C'est exactement vrai Fero - rmdir ne supprimera pas un répertoire contenant du contenu, c'est pourquoi vous devez d'abord supprimer tout contenu si vous voulez vous débarrasser d'un répertoire (y compris le contenu de tout sous-répertoire) – Fenton
Il n'y a pas construire seule fonction en PHP qui permettrait cela, vous devez écrire votre propre rmdir et délier.
Un exemple (extrait d'un commentaire sur php.net docs):
<?
// ensure $dir ends with a slash
function delTree($dir) {
$files = glob($dir . '*', GLOB_MARK);
foreach($files as $file){
if(substr($file, -1) == '/')
delTree($file);
else
unlink($file);
}
rmdir($dir);
}
?>
Qu'est-ce que GLOB_MARK? – Randell
@Randell: GLOB_MARK - Ajoute une barre oblique à chaque répertoire renvoyé. –
Voici un script qui va faire exactement ce dont vous avez besoin:
/**
* Recursively delete a directory
*
* @param string $dir Directory name
* @param boolean $deleteRootToo Delete specified top-level directory as well
*/
function unlinkRecursive($dir, $deleteRootToo)
{
if(!$dh = @opendir($dir))
{
return;
}
while (false !== ($obj = readdir($dh)))
{
if($obj == '.' || $obj == '..')
{
continue;
}
if ([email protected]($dir . '/' . $obj))
{
unlinkRecursive($dir.'/'.$obj, true);
}
}
closedir($dh);
if ($deleteRootToo)
{
@rmdir($dir);
}
return;
}
Je l'ai de php.net et il fonctionne .
Peut-être une meilleure approche est d'utiliser rm
(si vous êtes sous Linux). Il serait quelque chose comme ça ($root
doit toujours être à votre TMP directory
pour empêcher la suppression des fichiers vitaux!):
function remove($dir) {
$root = $_SERVER['DOCUMENT_ROOT'].'/tmp/';
if (is_dir($root.$dir)) {
exec('rm -rf '.$root.$dir);
}
}
remove ("/") ... fera tout heureux :) –
Yikes. Les commandes Shell doivent être évitées. – Volomike
SUPPRIMER DES FICHIERS COMME CELA DANS UNE APPLICATION WEB DOIT ÊTRE ÉVITÉ. DONNER DES CHEMINS RELATIFS PEUT SUPPRIMER UN FICHIER DANS LE SYSTÈME SI L'UTILISATEUR DE L'APP A L'AUTORISATION. – ArunaFromLK
- 1. Comment supprimer un fichier d'un dossier en utilisant PHP
- 2. Comment faire pour supprimer le dossier de compte d'utilisateur Windows en utilisant C#?
- 3. faire un blog en utilisant php
- 4. Comment faire pour supprimer le lecteur USB en utilisant C#
- 5. Comment faire pour supprimer un morceau de balises HTML dans une page HTML en utilisant PHP
- 6. cant supprimer un dossier en utilisant la commande deletefile
- 7. Trouver un contenu en double en utilisant MySQL et PHP
- 8. Comment faire pour obtenir le contenu du corps de HTTPS en utilisant CURL
- 9. Comment faire pour ouvrir le contenu d'ouverture avec jquery
- 10. PHP: Manière la plus simple de supprimer un dossier (y compris son contenu)
- 11. Comment supprimer le dossier dans la corbeille
- 12. Comment faire pour afficher le nom des fichiers de dossier (nom coréen) en php?
- 13. Comment configurer Eclipse pour ne pas supprimer le contenu du dossier classes lors de la compilation?
- 14. Comment faire pour échapper $ dans PHP en utilisant preg_replace?
- 15. Comment supprimer raccourci StartMenu en utilisant C#
- 16. Comment faire un fichier pdf en utilisant PHP
- 17. Copie du contenu du dossier en utilisant VBScript
- 18. Comment avoir un 404 spécifique pour un dossier utilisant ASP.NET?
- 19. Supprimer le contenu d'un fichier en Java
- 20. Supprimer une opération dans php en utilisant le prototype js
- 21. Comment faire pour supprimer le script php lui-même (et inclut dir)
- 22. Comment vérifier en utilisant PHP fonctionnalité FTP si le dossier existe sur le serveur ou non?
- 23. Comment faire pour avoir le dossier et le contrôleur avec le même nom dans ASP.NET MVC?
- 24. Faire une réécriture supprimer .php extension?
- 25. Comment supprimer le contenu d'un élément avec JQuery?
- 26. Comment faire pour supprimer la propriété de répertoire Web IIS 6 en utilisant directoryentry en C#
- 27. Comment obtenir le type de contenu d'un fichier en PHP?
- 28. Comment faire pour supprimer Type Erasure en Java
- 29. Comment faire un carrousel circulaire avec jCousel et contenu statique?
- 30. Comment est-ce que j'analyserais un répertoire pour faire des liens aux pdf utilisant php?
@@ Maerlyn: J'ai posté cette question le 26 août 2009. L'une double que vous avez mentionné a été publié le 28 juillet 2010 .. Je crois que vous savez quoi faire MAINTENANT ... Avant de faire quelque chose s'il vous plaît vérifier une fois. – Fero