Eliminar directorio en PHP

Subodh Poudel 8 octubre 2023
  1. Utilice la función rmdir() para eliminar un directorio vacío en PHP
  2. Use recursividad para eliminar directorios no vacíos en PHP
Eliminar directorio en PHP

Este tutorial explicará dos formas de eliminar un directorio en PHP. Aquí, nos ocuparemos de dos escenarios.

El primero elimina un directorio vacío y el segundo elimina un directorio no vacío.

Utilice la función rmdir() para eliminar un directorio vacío en PHP

Podemos usar la función rmdir() para eliminar un directorio vacío en PHP. La función es una función PHP incorporada.

La función elimina el directorio solo si no hay contenido dentro de él. Podemos proporcionar el directorio a eliminar como parámetro de la función rmdir().

La función devuelve “true” en caso de éxito y “false” en caso contrario.

El directorio debe existir para eliminar un directorio. Usaremos la función mkdir() para crear un directorio para la demostración.

La función toma la ruta como parámetro.

Por ejemplo, cree una variable $ruta y almacene la ruta de un directorio que se creará. A continuación, utilice la función mkdir() con $ruta como parámetro.

Código de ejemplo:

$path =$_SERVER['DOCUMENT_ROOT']."/newFolder";
mkdir($path);

El ejemplo de código anterior crea un directorio newFolder en la raíz del documento PHP. Cuando imprime la variable $ruta, la salida se ve así en Linux.

/var/www/html/newFolder

En Windows, la salida es algo así.

C:\xampp\htdocs\newFolder

Ya que hemos creado un directorio, ahora es el momento de borrarlo usando rmdir().

Código de ejemplo:

if(is_dir($path)){
 rmdir($path);
 echo "the directory is deleted";
}

Producción :

the directory is deleted

Verificamos si el directorio existe usando la función is_dir() y la función rmdir() para eliminar el directorio myFolder en la raíz del documento.

Use recursividad para eliminar directorios no vacíos en PHP

Como sabemos que rmdir() solo elimina el directorio vacío, necesitamos usar una funcionalidad recursiva y rmdir() para eliminar un directorio no vacío en PHP. En este método, usaremos un par de funciones de PHP como array_diff(), scandir() y unlink().

La función array_diff() toma varias matrices como parámetros y devuelve una matriz con los valores que solo existen en la primera matriz de parámetros.

La función scandir() enumera todos los archivos y directorios de una ruta específica. La función unlink() elimina el archivo especificado en su parámetro.

El concepto detrás de la eliminación de un directorio trata recursivamente de encontrar primero todos los archivos y carpetas dentro de un directorio. Luego, se crea un bucle para recorrer todo el contenido dentro del directorio principal.

La operación recursiva se aplica para cada carpeta dentro del directorio principal hasta que se alcanza la profundidad. En profundidad, el archivo se elimina mediante la función unlink().

El programa vuelve a la ruta recorrida y elimina todos los archivos. Después de eliminar todos los archivos, finalmente, se elimina el directorio principal.

Consideremos un escenario donde la estructura del directorio se ve así.

testFolder
├── abc.png
├── abc.text
└── sub
 └── abc.jpeg

El siguiente código de ejemplo elimina testFolder de forma recursiva.

Código de ejemplo:

function deleteDirectory($path){

 $files = array_diff(scandir($path), array('.','..'));
 foreach($files as $file){
 (is_dir("$path/$file")) ? deleteDirectory("$path/$file") : unlink("$path/$file");
 }
 return rmdir($path);
}
$path =$_SERVER['DOCUMENT_ROOT']."/testFolder";
deleteDirectory($path);

Aquí, la función deleteDirectory() es una función definida por el usuario que toma un parámetro $ruta, que es la ruta del directorio a eliminar. testFolder es la $ruta suministrada.

En primer lugar, se ejecuta la función scandir() anidada. Enumera todo el contenido del directorio testFolder como una matriz.

Array ( [0] => . [1] => .. [2] => abc.png [3] => abc.text [4] => sub )

A continuación, hemos utilizado la función array_diff() para eliminar . y .. de la matriz anterior. El punto único representa el directorio actual, mientras que el punto doble representa el directorio principal.

Como resultado, la matriz $files contiene abc.png, abc.text y sub. Luego, usamos el bucle foreach() para iterar a través de estos archivos y carpetas.

Dentro del ciclo, verificamos si el iterable es un directorio. Pero, los dos primeros elementos no lo son.

Por lo tanto, se eliminan mediante la función unlink(). El tercer sub iterable es un directorio que cumple la condición.

Entonces, la función deleteDirectory() se llama recursivamente. Esta vez, el directorio solo tiene un único archivo dentro.

El archivo se elimina con la función unlink() como los demás archivos. Finalmente, la ejecución sale del bucle.

A continuación, el directorio sub se elimina con la función rmdir(). Luego, el árbol recursivo retrocede y el directorio principal testFolder se elimina.

Por lo tanto, aprendimos cómo eliminar un directorio recursivamente usando varias funciones en PHP.

Subodh Poudel avatar Subodh Poudel avatar

Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.

LinkedIn

Artículo relacionado - PHP Directory