Avatar billede chris0905 Nybegynder
28. juni 2011 - 14:28 Der er 11 kommentarer og
1 løsning

Delete fil via PHP

Hey Eksperter!

Jeg vil gerne lave en funktion, hvor at jeg kan uploade filer, se dem, og slette dem på min hjemmeside... Jeg har ordnet de to første, men er gået i stå, ved sletningen...

Jeg bruger følgende kode for at få vist hvilke filer jeg har:

foreach (glob('../uploads/*.*') as $fn)
  echo "<p><a href=\"$fn\">$fn</a></p>";


Jeg er nu kommet frem til, hvordan den skal slettes, nemlig:

<?php
$filename = "myfile.txt";
unlink($filename);
?>


Men hvordan får jeg den til at tage den fil jeg vælger og så når jeg beder om at den skal slettes, så sletter den???

Jeg havde overvejet at man skulle klikke på at link ved siden af der hvor man kan se filerne, ex:

foreach (glob('../uploads/*.*') as $fn)
  echo "<p><a href=\"$fn\">$fn</a>  <a href=\"slet_fil.php?navn=$navn\">Slet fil</a></p>";


og så have en anden side med:

<?php
$filename = $navn;
unlink($filename);
?>


Håber der er nogen der forstår mig og kan hjælpe...

Mvh

Christoffer
Avatar billede jakobdo Ekspert
28. juni 2011 - 15:00 #1
Du slipper jo nok ikke for at lave noget ala:

delete_file.php?filename=minfil.txt

og så delete_file.php

<?php
unlink($_GET['filename']);
?>

Dog skal du være meget OBS på, at folk ikke kan lave:

delete_file.php?filename=./../index.php eller:
delete_file.php?filename=delete_file.php
osv...
Så du skal sikre der kun kan slettes filer i en mappe du bestemmer.
Kig evt. på basename(), så burde du være sikker på at have en fil og ikke nogle som forsøger at traversere din biblioteker.
Avatar billede chris0905 Nybegynder
01. juli 2011 - 11:21 #2
og hvis jeg kun vil have at den kan slette filer i "../uploads/", hvordan kan den så se ud?
Avatar billede jakobdo Ekspert
01. juli 2011 - 11:26 #3
<?php
$fil_som_skal_slettes = "../uploads/" . basename($_GET['filnavn']);
if(unlink($fil_som_skal_slettes)){
echo 'Filen er slettet';
}else{
echo 'Filen er ikke slettet';
}
?>
Avatar billede chris0905 Nybegynder
01. juli 2011 - 11:43 #4
nu kommer den med meddelelsen "Filen er ikke slettet", men den er slettet, og den kan også tage filer uden for "../uploads"... hvorfor det?
Avatar billede jakobdo Ekspert
01. juli 2011 - 11:46 #5
Prøv at udskriv: $fil_som_skal_slettes
og se om jeg har gjort noget galt.
Avatar billede chris0905 Nybegynder
01. juli 2011 - 12:26 #6
den udskriver bare "../uploads/"...

men jeg fandt en løsning:

<?php
session_start();
if(!session_is_registered(myusername)){
header("location:main_login.php");
}

if($_GET['filename']== "../uploads/" . basename($_GET['filename'])) {

unlink($_GET['filename']);

echo ''.basename($_GET['filename']).' er nu slettet!<br><br><a href = "upload.php">Til "Upload"</a>';
}else{
echo 'Filen blev ikke slettet... Forkert mappe...';
}
?>
Avatar billede chris0905 Nybegynder
01. juli 2011 - 12:38 #7
tak for hjælpen!
Avatar billede jakobdo Ekspert
01. juli 2011 - 12:44 #8
Din kode i #6 bør ikke umiddelbart virke...
Avatar billede chris0905 Nybegynder
01. juli 2011 - 12:55 #9
men det gør den... i hvert fald lige nu... hvad er der da ellers galt???
Avatar billede chris0905 Nybegynder
01. juli 2011 - 12:59 #10
hva med denne, den virker nemlig ikke...

if($_GET['filename']== "../uploads/" . basename($_GET['filename'])) {

if(unlink($_GET['filename'])) {

echo ''.basename($_GET['filename']).' er nu slettet!<br><br><a href="upload.php">Til upload</a><br><br><a href="index.php">Til forsiden</a> ';
}else{
echo 'Filen blev ikke fundet...<br><br><a href = 'java script:history.back()'>Back to previous page</a>';
}
}else{
echo 'Filen blev ikke slettet... Forkert mappe...<br><br><a href = 'java script:history.back()'>Back to previous page</a>';
}
Avatar billede chris0905 Nybegynder
01. juli 2011 - 13:01 #11
næ... nu virker det... havde lavet forkerte tegn omkring "java script:history.back()"...
Avatar billede jakobdo Ekspert
01. juli 2011 - 13:26 #12
Hvad med:

if(isset($_GET['filename']){
  $fil = "../uploads/" . basename($_GET['filename']);
 
  if(unlink($fil)){
    echo basename($_GET['filename']).' er nu slettet!<br><br><a href="upload.php">Til upload</a><br><br><a href="index.php">Til forsiden</a> ';
  }else{
    echo 'Filen blev ikke fundet...<br><br><a href = 'java script:history.back()'>Back to previous page</a>';
  }
}else{
  echo 'Filen blev ikke slettet... Forkert mappe...<br><br><a href = 'java script:history.back()'>Back to previous page</a>';
}
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester