Pregunta

Tengo esto hasta ahora:

<?php

$path = "files/";

$files = glob("" . $path . "{*.jpg, *.gif, *.png}", GLOB_BRACE);

$i = 0;

foreach($files as $file)
{
    $delete = unlink($file);

    if($delete)
    {
        echo $file . " deleted!<br />";
        $i - 1;
    }
    else
    {
        echo $file . " could not be deleted...<br />";
        $i + 1;
    }   
}

if($i == 0)
{   
    if(is_dir($path))
    {
        $remove = rmdir($path);

        if($remove)
        {
            echo "directory was deleted</br />";
        }
        else
        {
            echo "directory could not be deleted</br />";
        }
    }
    else
    {
        echo "not a valid directory<br />";
    }
}
else
{
    echo "there are some files in the folder";
    echo $i;
}

?>

Se elimina todos los archivos, que es grande. Sin embargo, no elimina el directorio. ¿Qué hay de malo en esto?

¿Fue útil?

Solución

Se necesita para tirar de la rmdir fuera del circuito. Algo así como:

$numfailed = 0;

foreach($files as $file)
{
    $delete = unlink($file);

    if($delete)
    {
        echo $file . " deleted!<br />";
    }
    else
    {
        echo $file . " could not be deleted...<br />";
        $numfailed++;
    }   
}

if($numfailed == 0)
{   
    if(is_dir($path))
    {
        $remove = rmdir($path);

        if($remove)
        {
            echo "directory was deleted</br />";
        }
        else
        {
            echo "directory could not be deleted</br />";
        }
    }
    else
    {
        echo "not a valid directory<br />";
    }
}
else
{
    echo "there are still files in the folder, failed to remove $numfailed";
}

Otros consejos

Usted está tratando de eliminar el directorio en el foreach bucle que eliminará los archivos dentro de ese directorio.

que iba a tratar de eliminar todos los archivos primero y luego eliminar el directorio, de lo contrario no estará vacía y no se puede eliminar.

También $ I-contador no puede hacer el trabajo de decirle cuando el directorio está vacío: imaginar se borrará tu primer archivo, a continuación, $ i = -1. Si ahora no se elimina el segundo archivo, el $ i = 0 ... que es la condición para borrar el directorio, a pesar de que no está vacío porque al menos sus restos segundo archivo.

rmdir elimina un directorio, pero sólo si está vacío. Tienes que eliminar cada archivo (y cada subdirectorio con sus archivos) antes de que un directorio puede ser eliminado.

Posiblemente permisos.

Como sólo la supresión de determinados tipos de archivos determinados puede haber otros archivos que quedan en el directorio que usted no tiene permisos para eliminar, por ende no se puede eliminar la carpeta.

Trate de ver si la carpeta está vacía antes de tratar de comando rmdir en él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top