Necesito eliminar una carpeta con contenido usando PHP. rmdir()
y unlink()
eliminan las carpetas vacías, pero no pueden eliminar las carpetas que tienen contenido.Cómo eliminar una carpeta con contenido usando PHP
Respuesta
Esta función le permite eliminar cualquier carpeta (siempre y cuando sea grabable) y es archivos y subdirectorios.
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;
}
o sin el uso de la recursividad 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;
}
Gran método, hombre . Estaba usando el comando más simple: Php system ("rm -r RESOURCE_PATH"); ?>, pero lamentablemente algunos servidores no permiten el comando del sistema, por lo que el suyo (elegí el primero) es una sustitución muy buena y simple. Gracias hermano. –
¿Esto también funciona para rutas relativas? Entonces, digamos que la ruta completa es "/ var/www/html/folder_and_files_to_delete /" Y el script de eliminación se ubica en "/var/www/html/delete_folders_and_files.php". ¿Puedo simplemente tomar "folder_and_files_to_delete" como ruta? – yoano
Me gusta, la mejor respuesta – mghhgm
Debe recorrer el contenido de la carpeta (incluido el contenido de las subcarpetas) y eliminarlas primero.
Hay un ejemplo aquí: http://lixlpixel.org/recursive_function/php/recursive_directory_delete/
cuidado con él !!!
Usted tendrá que eliminar todos los archivos de forma recursiva. Hay funciones de ejemplo de la abundancia en los comentarios de la página de manual de rmdir
:
espero que rmdir elimine solo la carpeta que no tiene contenido. si tiene contenido, no eliminará la carpeta. – Fero
Eso es exactamente Fero - rmdir no eliminará un directorio que tenga contenido, por lo que primero debe eliminar cualquier contenido si desea deshacerse de un directorio (incluido el contenido de cualquier subdirectorio) – Fenton
No existe una función única a construir en PHP que permitiría a esto, se tiene que escribir su propia con rmdir y desvincular.
Un ejemplo (tomado de un comentario en 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é es GLOB_MARK? – Randell
@Randell: GLOB_MARK - Agrega una barra inclinada a cada directorio devuelto. –
Aquí hay un script que va a hacer todo lo que necesita:
/**
* 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;
}
Me lo dio php.net y funciona .
Quizás un mejor enfoque es usar rm
(si está en linux). Sería algo parecido a esto ($root
debe estar siempre a su TMP directory
para evitar la eliminación de archivos vitales!):
function remove($dir) {
$root = $_SERVER['DOCUMENT_ROOT'].'/tmp/';
if (is_dir($root.$dir)) {
exec('rm -rf '.$root.$dir);
}
}
remove ("/") ... hará feliz a todos :) –
Yikes. Los comandos de Shell deben ser evitados. – Volomike
ELIMINAR ARCHIVOS COMO ESTE EN UNA APLICACIÓN WEB DEBE SER EVITADO. DAR RUTA RELATIVA PUEDE ELIMINAR CUALQUIER ARCHIVO EN EL SISTEMA SI LA APLICACIÓN DEL USUARIO TIENE PERMISO. – ArunaFromLK
- 1. Eliminar imágenes de una carpeta
- 2. Descargando una carpeta mediante FTP usando PHP
- 3. ¿Cómo subir una carpeta con PHP?
- 4. PHP: forma más sencilla de eliminar una carpeta (incluido su contenido)
- 5. ¿Cómo eliminar todos los archivos en una carpeta, pero no eliminar la carpeta usando las bibliotecas estándar de NIX?
- 6. Cómo descomprimir una carpeta zip usando el código php
- 7. ¿Cómo eliminar una carpeta en C++?
- 8. ¿Cómo eliminar una subcadena de una cadena usando PHP?
- 9. PHP Dom Eliminar elemento dejar contenido
- 10. Cómo eliminar una carpeta de forma asíncrona
- 11. ¿Cómo eliminar una carpeta con todos los contenidos usando un archivo bat en Windows?
- 12. ¿Cómo eliminar de forma recursiva una carpeta con los archivos dentro usando FtpWebRequest?
- 13. Eliminar el contenido de una Div usando JQuery
- 14. ¿Cómo eliminar una carpeta y todo su contenido del directorio actual?
- 15. Buscar el archivo más antiguo en una carpeta usando PHP
- 16. extrayendo contenido del pdf usando PHP
- 17. Obtenga el contenido de una carpeta sharepoint con Excel VBA
- 18. Cómo eliminar un directorio y su contenido usando NSFileManager
- 19. NSFileManager eliminar contenido del directorio
- 20. ¿Cómo puedo mover un archivo a otra carpeta usando php?
- 21. Eliminar una carpeta en la tarjeta SD
- 22. Cómo hacer una carpeta oculta usando java
- 23. ¿Cómo recorro todos los archivos en una carpeta usando C?
- 24. ¿Cómo comprime el contenido de una carpeta usando python (versión 2.5)?
- 25. ¿Cómo enumerar el contenido de una carpeta .zip en C#?
- 26. cómo descargar archivos adjuntos a una carpeta específica usando IMAP y php
- 27. Eliminar carpeta y archivos del proyecto usando NuGet/Powershell
- 28. Eliminar un archivo usando php/codeigniter
- 29. ¿Cómo eliminar una sesión de PHP?
- 30. ¿Cómo leer una lista de archivos de una carpeta usando PHP?
@@ Maerlyn: He publicado esta pregunta el 26 de agosto de 2009. El duplicado, que usted ha mencionado fue publicado el 28 de julio de 2010 ... Creo que ya sabes qué hacer AHORA ... Antes de hacer algo, por favor revisa una vez. – Fero