[PHP] Directories & Files verwijderen van HD.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor een soort van filemanager, proberen we nu een functie te maken om directories te kunnen verwijderen van de harde schijf van de server. Hiervoor gebruiken we nu (o.a.) de volgende code:

code:
1
2
$cmd = "rm -r " . escapeshellarg($path);
print "<br />Uitvoer: " . exec($cmd);


safe_mode is uitgeschakeld en een map die we wilen verwijderen heeft de rechten: 777 (Als test).

Als we het complete commando "printen" op het beeldscherm, voert hij dus letterlijk uit:

rm -r '/oo_root/ArticSun/DitIsTest'

Dit wil niet werken met het commando "exec", wel met "exec_shell" en dan nog zelfs met de rechten 700, wat is nu precies het verschil?

shell_exec werkt via een shell, maar waarom zou exec niet gewoon werken?

Op php.net functieoverzicht, kan ik het verschil niet echt vinden (behalve dus dat ie via shell werkt).

Bedankt!

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Waarom via shell en niet gewoon de php-functies gebruiken?

Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Precies, voor verwijderen heb je iets als "unlink". Kijk maar even op php.net voor verdere details.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
rmdir() verwijderd enkel LEGE directories, terwijl we ook de onderliggende structuur willen verwijderen.

unlink(), kan je alleen gebruiken voor bestanden en niet voor directories.

Ik ben voornamelijk benieuwd naar het verschil tussen exec() en shell_exec().

Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 03 mei 2004 @ 11:57:
rmdir() verwijderd enkel LEGE directories, terwijl we ook de onderliggende structuur willen verwijderen.

unlink(), kan je alleen gebruiken voor bestanden en niet voor directories.
je zou moeten weten dat als je dat combineert je alles weg kan gooien... want als alles files weg zijn, is een dir leeg en dus kan je die met rmdir wegpleuren.
en als je dat dus ff recursief doet ben je zo klaar..

en voor het verschil kun je gewoon ff op www.php.net kijken, lijkt me niet al te pittig

edit:
example
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function rmdir_recursive($dirname)
{
    $dir=@opendir($dirname);
    if (!$dir) return false;
    while ($file=readdir($dir))
    {
        if ($file == "." || $file == "..")
            continue;

        $path=$dirname."/".$file;
        if (is_file($path))
            unlink($path);
        elseif(is_dir($path))
            rmdir_recursive($path);
    }
    closedir($dir);
    rmdir($dir);
}
rmdir_recursive("/home/test/blaat/wegdir");

[ Voor 37% gewijzigd door Verwijderd op 03-05-2004 14:54 ]