Meerdere mappen verwijderen
Nu heb ik op internet ergens een scriptje gevonden die dat netjes doet. Alleen het script delete 1 map.
Wat ik graag zou willen is dat het script alle mappen verwijdert de bij een bepaald userid horen.
Dit is tot nu toe het script. Is er een manier om ervoor te zorgen dat het script alle mappen uit $result verwijdert ?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
$con = mysqli_connect("xxx","xxx","xxx","xxx")or die ('tijdelijk niet beschikbaar. Probeer het later nog eens.');
$result = mysqli_query($con,"SELECT mapnaam FROM gegevens WHERE User_ID = '".($con,$_SESSION["User_ID"]). "' ")or die ('De dienst is tijdelijk niet beschikbaar. Probeer het later nog eens');
while($row = mysqli_fetch_assoc($result)) {
$dir = htmlentities ($row ["mapnaam"]);
}
//delete mappen.
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
rrmdir($dir);
?>
$con = mysqli_connect("xxx","xxx","xxx","xxx")or die ('tijdelijk niet beschikbaar. Probeer het later nog eens.');
$result = mysqli_query($con,"SELECT mapnaam FROM gegevens WHERE User_ID = '".($con,$_SESSION["User_ID"]). "' ")or die ('De dienst is tijdelijk niet beschikbaar. Probeer het later nog eens');
while($row = mysqli_fetch_assoc($result)) {
$dir = htmlentities ($row ["mapnaam"]);
}
//delete mappen.
function rrmdir($dir) {
if (is_dir($dir)) {
$objects = scandir($dir);
foreach ($objects as $object) {
if ($object != "." && $object != "..") {
if (filetype($dir."/".$object) == "dir") rrmdir($dir."/".$object); else unlink($dir."/".$object);
}
}
reset($objects);
rmdir($dir);
}
}
rrmdir($dir);
?>
Daarna, verwijder je alleen de laatste map ;)
Doe het eens zo:
Let ook op de andere wijzigingen/commentaar.
Dat is niet voor niets!
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?php
// declareer functie (mag ook extern, dan includen)
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
// bij bestand: verwijder
if (filetype($dir . "/" . $object) == "dir")
{
rrmdir($dir . "/" . $object);
}
// bij directory: herhaal deze functie nog een keer
else
{
unlink($dir . "/" . $object);
}
}
}
reset($objects);
rmdir($dir);
}
return true;
}
// maak connectie, liefst ook extern (en dan includen)
$con = mysqli_connect("xxx", "xxx", "xxx", "xxx");
if ($con === false)
{
echo 'Ik moet dood!';
}
// hier zou je script moeten starten
// haal alle mappen van de gebruiker op
$result = mysqli_query($con, "SELECT mapnaam FROM gegevens WHERE User_ID = '" . $con, $_SESSION["User_ID"] . "' ");
if ($result === false)
{
echo 'Ik moet weer dood!';
}
while ($row = mysqli_fetch_assoc($result))
{
// nodeloos kopieren van variabelen
$dir = htmlentities($row["mapnaam"]);
//delete map (enkelvoud!)
rrmdir($dir);
}
?>
// declareer functie (mag ook extern, dan includen)
function rrmdir($dir)
{
if (is_dir($dir))
{
$objects = scandir($dir);
foreach ($objects as $object)
{
if ($object != "." && $object != "..")
{
// bij bestand: verwijder
if (filetype($dir . "/" . $object) == "dir")
{
rrmdir($dir . "/" . $object);
}
// bij directory: herhaal deze functie nog een keer
else
{
unlink($dir . "/" . $object);
}
}
}
reset($objects);
rmdir($dir);
}
return true;
}
// maak connectie, liefst ook extern (en dan includen)
$con = mysqli_connect("xxx", "xxx", "xxx", "xxx");
if ($con === false)
{
echo 'Ik moet dood!';
}
// hier zou je script moeten starten
// haal alle mappen van de gebruiker op
$result = mysqli_query($con, "SELECT mapnaam FROM gegevens WHERE User_ID = '" . $con, $_SESSION["User_ID"] . "' ");
if ($result === false)
{
echo 'Ik moet weer dood!';
}
while ($row = mysqli_fetch_assoc($result))
{
// nodeloos kopieren van variabelen
$dir = htmlentities($row["mapnaam"]);
//delete map (enkelvoud!)
rrmdir($dir);
}
?>
Gewijzigd op 07/06/2015 12:16:16 door Eddy E
Bedankt voor je reactie Eddy, Het werkt inmiddels prima!.
Dan hoef je slechts één enkele map (die met het user id) recursief te verwijderen met rmdir().
Nu staan directories op compleet willekeurige (?) plaatsen. Hoe voorkom je dat users niet met/in elkaars bestanden bezig zijn (als het de bedoeling is om alles strikt te scheiden).
Daarnaast vertel je niet echt veel over het bovenstaande, dus: hoe gaan verschillende gebruikers om met deze mappen, wat kunnen ze hiermee doen / hierin uploaded etc.
En de oplossing was dus: rmdir op de goede plaats zetten.