Frage

Ich habe diese so weit:

<?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;
}

?>

Es löscht alle Dateien, die groß ist. Allerdings ist es nicht entfernen, das Verzeichnis. Was ist los mit diesem?

War es hilfreich?

Lösung

Sie müssen die rmdir aus der Schleife ziehen. So etwas wie:

$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";
}

Andere Tipps

Sie versuchen, Ihr Verzeichnis in der foreach-Schleife zu entfernen, die die Dateien in diesem Verzeichnis gelöscht werden.

Ich würde versuchen, alle Dateien zuerst löschen und dann das Verzeichnis löschen, sonst ist es nicht leer sein wird und nicht gelöscht werden kann.

Auch $ Sie i-Zähler wird die Arbeit zu Ihnen zu sagen, nicht tun, wenn das Verzeichnis leer ist: stellen Sie sich Ihre erste Datei gelöscht wird, dann $ i = -1. Wenn nun Ihre zweite Datei nicht gelöscht wird, ich Ihr $ 0 = ..., die die Bedingung ist das Verzeichnis zu löschen, auch wenn es nicht leer ist, weil zumindest Ihre zweite Datei bleibt.

rmdir entfernt ein Verzeichnis, aber nur, wenn es leer ist. Sie müssen jede Datei löschen (und jedes Unterverzeichnis mit ihren Dateien), bevor ein Verzeichnis entfernt werden kann.

Möglicherweise Berechtigungen.

Wie Sie nur bestimmte bestimmte Dateitypen zu löschen kann es andere Dateien im Verzeichnis links sein, dass Sie die Berechtigungen nicht haben zu löschen, für Sie den Ordner nicht löschen können.

Versuchen Sie überprüfen, ob der Ordner rmdir Befehl, bevor Sie auf sie leer ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top