• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

is_file, aber unlink geht nicht

Animal21

Neues Mitglied
Hallo leute,
bei meinem rekursiven löschen von ordnern ist ein merkwürdiger fehler.
Die datei "läuft" zwar durch die 'is_file' if, aber unlink funktioniert nicht : (

was könnte aflsch sein?

PHP:
...
$files = filemanager::getGenFiles($dir);
        $db->Execute('INSERT INTO `al_test` (`text`) VALUES (\''.$dir.'\');');
        if($files){
            foreach($files as $file){
                if(is_file($dir.'/'.$file)){            
                    if(unlink($dir.'/'.$file)) $flags[] = true;
                    else {
                        $flags[] = false;
                        $sql = 'INSERT INTO `al_test` (`text`) VALUES (\''.$dir.'/'.$file.' - not deleted\');';
                        $db->Execute($sql);            
                    }
                } else {
                    $db->Execute('INSERT INTO `al_test` (`text`) VALUES (\''.$dir.'/'.$file.' - no File!\');');
                    $flags[] = false;
                }
            }
        }
...

in der DB stehen immer die '... - not deleted' einträge...

lg
ani
 
Der User, unter dem dein Script läuft, hat vermutlich nicht das Recht, die Löschung durchzuführen. (Die Datei gehört ihm nicht und ist entsprechend restriktiv eingestellt.)

Ich glaube, das kannst du mit PHP: is_writable - Manual testen (vielleicht auch für das Verzeichnis, nicht für die Datei), bin mir aber nicht sicher.
 
Ein kleines Script, dass dir Eigentümer und Rechte aus einem Verzeichnis ausliest.
PHP:
function echodir($path = ".")
{
    global $check;
    @$dir = dir($path);

    while(false !== ($file = $dir->read()))
    {
        if(("."  == $file) OR  (".." == $file))
        {
            continue;
        }

        if(is_dir($path."/".$file))
        {
            $check[] = $path."/".$file;
            echodir($path."/".$file);
        }
        else
        {
            $check[] = $path."/".$file;
        }

    }
    $dir->close();
    return $check;
}

function list_dir($files)
{
    echo "<pre>";
    echo "<table style=\"border:black 1px solid; width:100%;\">";
    echo "<tr><td style=\"background-color:yellow; font-weight:bold;\">Path</td><td style=\"background-color:yellow; font-weight:bold;\">Chown</td><td style=\"background-color:yellow; font-weight:bold;\">Chmod</td></tr>";
    foreach($files as $element)
    {
        $stat = stat($element);
        $user = posix_getpwuid($stat['uid']);
        echo "<tr>\n";
        echo "<td>\n".$element."</td>";
        echo "<td width=\"4%\" style=\"border-left:red 1px solid; border-right:red 1px solid; padding:3px;\">".$user['name']."</td>";
        echo "<td width=\"4%\" style=\"border-left:red 1px solid; border-right:red 1px solid; padding:3px;\">".@substr(sprintf('%o', fileperms($element)), -4)."</td>";
        echo "</tr>";
    }
    echo "</table>";
    echo "</pre>";
}

$files = echodir(".");
list_dir($files);
 
Wird durch ein unlink() der Speicher nicht automatisch geleert (also ein clearstatcache() automatisch aufgerufen)?
Warum sollte clearstatcache() ein unlink verhindern?
 
Zurück
Oben