¿Cómo elimino un directorio y todo su contenido (archivos y subdirectorios) en PHP?
php
recursion
delete-directory
Itay Moav -Malimovka
fuente
fuente
Respuestas:
La sección aportada por el usuario en la página del manual de
rmdir
contiene una implementación decente:fuente
is_dir
dos veces para cada directorio recursivo. Si el argumento es un enlace simbólico, también lo sigue en lugar de eliminar el enlace simbólico, que puede o no ser lo que desea. En cualquier caso, no es lo querm -rf
hace.Sobre la base del comentario de The Pixel Developer , un fragmento que use el SPL podría verse así:
Nota: No hace ninguna comprobación de cordura y hace uso de la bandera SKIP_DOTS introducido con el FilesystemIterator en PHP 5.3.0. Por supuesto, el
$todo
podría ser unif
/else
. El punto importante es queCHILD_FIRST
se usa para iterar sobre los hijos (archivos) primero antes de sus padres (carpetas).fuente
SKIP_DOTS
solo se introdujo en PHP 5.3? ¿Dónde viste eso?getPathname()
método en lugar degetRealPath()
?rmdir($dir)
al final del guión.rmdir()
yunlink()
, por ejemplo, aborta conE_WARNING
y devuelvetrue
ofalse
indica éxito.FilesystemIterator
no es un iterador recursivo.Elimina todos los archivos y carpetas en la ruta.
fuente
rm -rf /
==recurseRmdir('/')
:)is_dir("$dir/$file")
ais_dir("$dir/$file") && !is_link("$dir/$file")
Para * nix puede usar un
shell_exec
pararm -R
oDEL /S folder_name
para Windows.fuente
DEL /S folder_name
para WindowsRMDIR /S /Q folder_name
es lo que funcionó para míexec('rm -rf ' . __DIR__ . '/output/*.log');
fuente
Hay otro hilo con más ejemplos aquí: ¿ Una función de directorio de eliminación recursiva para PHP?
Si está utilizando Yii, puede dejarlo en el marco:
fuente
Código 'simple' que funciona y puede ser leído por un niño de diez años:
Tenga en cuenta que todo lo que hice fue expandir / simplificar y corregir (no funcionó para un directorio no vacío) la solución aquí: en PHP, ¿cómo elimino recursivamente todas las carpetas que no están vacías?
fuente
Solución mejorada de @Artefacto - errores tipográficos corregidos y código simplificado, trabajando para ambos - directorios vacíos y no vacíos.
fuente
La solución 100% funcional
fuente
¿Algo como esto?
fuente
Ejemplo con la función glob () . Eliminará todos los archivos y carpetas de forma recursiva, incluidos los archivos que comienzan con punto.
fuente
system('rm -fr folder')
la función unlinkr elimina de forma recursiva todas las carpetas y archivos en la ruta dada al asegurarse de que no elimine el script en sí.
si desea eliminar todos los archivos y carpetas donde coloca este script, llámelo de la siguiente manera
si solo desea eliminar solo archivos php, llámelo de la siguiente manera
puedes usar cualquier otra ruta para eliminar los archivos también
Esto eliminará todos los archivos en el directorio home / user / temp.
fuente
Yo uso este código ...
o este...
fuente
Una vez que termine de ejecutar las pruebas, simplemente elimine # del #unlink y #rmdir en la clase.
fuente
cleanup.php:
fuente
Parece que todas las demás respuestas suponen que la ruta dada a la función es siempre un directorio. Esta variante funciona para eliminar directorios y archivos individuales:
fuente
Usando DirectoryIterator y recursión correctamente:
fuente
Acabo de hacer este código, de algunas discusiones de StackOverflow. Todavía no he probado en el entorno Linux. Está hecho para eliminar un archivo o un directorio, completamente:
fuente
fuente
Variante modificada de la solución @XzaR. Elimina las carpetas vacías, cuando todos los archivos se eliminan de ellas y arroja excepciones en lugar de devolver errores falsos.
fuente
fuente
unlink
,rmdir
elopendir
+readdir
funciona más rápidoscandir
yRecursiveDirectoryIterator
también usa menos memoria que todos. Para eliminar la carpetaclosedir
, primero tengo que estar atrapado en esto. Gracias a esta respuesta.