¿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
rmdircontiene una implementación decente:fuente
is_dirdos 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 -rfhace.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
$todopodría ser unif/else. El punto importante es queCHILD_FIRSTse usa para iterar sobre los hijos (archivos) primero antes de sus padres (carpetas).fuente
SKIP_DOTSsolo 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_WARNINGy devuelvetrueofalseindica éxito.FilesystemIteratorno 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_execpararm -RoDEL /S folder_namepara Windows.fuente
DEL /S folder_namepara WindowsRMDIR /S /Q folder_namees 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,rmdirelopendir+readdirfunciona más rápidoscandiryRecursiveDirectoryIteratortambién usa menos memoria que todos. Para eliminar la carpetaclosedir, primero tengo que estar atrapado en esto. Gracias a esta respuesta.