Moin Bastian,
ich möchte ein verzeichnis mittels php leeren, aber es wird nicht geleert, obwohl mir die Dateien aufgelistet werden.
Werden die Dateien auch nach dem Löschen noch aufgelistet?
Woran liegt das?
In dem Fall würde „die Dateien“ nicht gelöscht – üblicherweise gibt es dafür eine Fehlermeldung.
// Verzeichnis leeren $dir = dirname(__FILE__) .'/ordner'; foreach(scandir($dir) as $file) { if($file === ".." or $file === ".") { continue; } echo $file."<br>"; unlink(dirname(__FILE__) .$file); }
Du iterierst über
dirname(__FILE__) . '/ordner
, löscht allerdings dann indirname(__FILE__)
. Passt die Fehlermeldung/der Rückgabewert von unlink dazu?Viele Grüße
Robert
Ok. Die Lösung demnach wohl:
// Verzeichnis leeren
$dir = dirname(__FILE__) .'/ordner/';
foreach(scandir($dir) as $file) {
if($file === ".." or $file === ".") {
continue;
}
echo $file."<br>";
unlink( $dir . $file);
}
ABER!
Schon der Ordner 'ordner' gefällt mir nicht.
Erzeuge den für jeden Benutzer neu:
<?php
## Diese Funktion legt ein eindeutig benanntes temporäres Verzeichnis
## an und gibt im Erfolgsfall den Name zurück, sonst false
## Parameter $errorType = siehe https://www.php.net/manual/de/errorfunc.constants.php
## Parameter $baseDir: Ein Verzeichnis in dem das Verzeichnis angelegt wird. Wenn nicht übergeben, leer oder falsy wird das TMP-Verzeichnis des Systems benutzt.
function mkTempDir(
$errorType = E_USER_ERROR,
$baseDir = ''
) {
if ( ! $baseDir ) {
$tmpdirName = sys_get_temp_dir() . '/' . uniqid( true );
} else {
$tmpdirName = $baseDir . '/' . uniqid();
}
if ( mkdir( $tmpdirName ) ) {
return true;
} else {
trigger_error (
"Das Verzeichnis '$tmpdirName' konnte nicht angelegt werden",
$errorType
);
return $tmpdirName;
}
}
### Usage:
# In den meisten Fällen wird derlei über
# mehrere Skripte hinweg benötigt. Deshalb:
session_start();
$_SESSION['tmpdir'] = mkTempDir();
?>
Machst Du das mit dem statischen Ordnername und zwei Benutzer agieren über Kreuz, dann löscht oder überschreibt der eine Benutzer die Dateien des anderen. Oder der andere bekommt die Rechnungen des einen...