Mazání souborů založených webserverem

Technicka podpora
2016-05-01 22:37

Soubory zapsané webovou aplikací jsou založeny s vlastníkem www-data, uživatelem, pod kterým běží webserver. Nelze je tedy obvykle odstranit přes FTP, protože FTP uživatel se od tohoto liší.

Obvykle tento případ nastává při potřebě promazat adresář s obsahem typu cache nebo sessions.

FTP uživatel ale bývá členem skupiny www-data.

Aby bylo možné takové soubory odstranit, je třeba, aby byly zapisovatelné skupinou a nadřazené adresáře rovněž.

Pokud nelze nastavit přímo ve webové aplikaci, s jakými právy se mají soubory ukládat, lze pomocí PHP práva změnit na již vytvořených.

Pro jednotlivý soubor:
<?php chmod "cesta/k/souborum/soubor.txt", 0664); ?>

Pro celý obsah adresáře:
<?php
$pathname = "cesta/k/souborum";
$filemode = 0664;

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathname));

foreach($iterator as $item) {
    chmod($item, $filemode);
}

?>


Poté by již neměl být problém soubory odstranit pomocí FTP.

Další možností je odstranění přímo pomocí PHP skriptu, pod uživatelem www-data, pod kterým byly vytvořeny.

Promazání adresáře lze provést například takto:

<?php
$dir = "cesta/k/souborum";
$di = new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS);
$ri = new RecursiveIteratorIterator($di, RecursiveIteratorIterator::CHILD_FIRST);
foreach ( $ri as $file ) {
    $file->isDir() ?  rmdir($file) : unlink(realpath($file));
}
return true;
?>

Aby tento skript promazal obsah požadované složky, musím mít všechny adresáře v cestě právo zápisu pro skupinu (ideálně 775).

V případě povolené funkce exec je celá operace výrazně jednodušší:
<?php exec('rm cesta/k/souborum/*'); ?>


Pokud žádný z výše uvedených postupů nepřinese požadovaný výsledek, případně je souborů v adresáři extrémní množství, kontaktujte s požadavkem na odstranění technickou podporu.

Průměrné hodnocení: 5 (1 hlas)

K tomuto záznamu nemůžete připojit komentář.