Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z usuwaniem plików
Forum PHP.pl > Forum > PHP
dresik
Witam, napisałem (z pomocą ksiązek i neta) skrypt do uploadu plików, wszystko działa pięknie i ładnie, ale niestety jak chce zrobić usuwanie plików po kliknieciu na link to nie działa, poniżej wkleje część skryptu, jeśli ktoś wie gdzie jest bład to prosze pisać

przykłądowy link do usuwania:
<a href=\"index.php?id=$file\">usun</a>

funkcja usuwająca:
$site = $HTTP_GET_VARS ['id'];
if(!isset($site)) {
unlink("upload/$site");
}

  1. <?php
  2. function getDir($dir, $extList)
  3. {
  4. if(!($fd = opendir($dir))){
  5. return false;
  6. }
  7. $arr = explode(";", $extList);
  8. foreach($arr as $key => $file){
  9. $arr[$key] = trim($file);
  10. }
  11. $contents = "";
  12.  
  13. while (($file = readdir($fd)) !== false){
  14. if(($file == "..") || ($file == ".")){
  15. continue;
  16. }
  17. $ext = substr($file, strlen($file) - 3, 3);
  18. $ext = strtolower($ext);
  19.  
  20. if(in_array($ext, $arr)){
  21. $i++;
  22. $waga = filesize("upload/$file");
  23. $waga = $waga/1024;
  24. $pozycja = strpos($waga , '.');
  25. $pozycja=$pozycja+4;
  26. $waga=substr($waga, 0, $pozycja);
  27. $time = "upload/$file";
  28. $contents .= '<tr><td width="30" bgcolor="#f5f5f5">&nbsp;'.$i.'</td>';
  29. $contents .= '<td width="380" bgcolor="#f5f5f5">&nbsp;';
  30. $contents .= "<a href="$dir$file">$file</a>";
  31. $contents .= '</td><td width="120" bgcolor="#f5f5f5">&nbsp;'.$waga.' kB</td>'; 
  32. $contents .= '<td width="190" bgcolor="#f5f5f5">&nbsp;'.date ("d F Y H:i:s", filectime($time)).'</td>';
  33. $contents .= "<td><a href="index.php?id=$file">usun</a></td></tr>"; 
  34. $contents .= "n";
  35.  
  36.  
  37. $site = $HTTP_GET_VARS ['id'];
  38. if(!isset($site)) {
  39. unlink("upload/$site");
  40. }
  41.  
  42. }
  43. }
  44. closedir($fd);
  45. return($contents);
  46. }
  47.  
  48. echo getDir("upload/", "jpg;jpeg;gif;png;bmp;doc;docx;rtf;txt;pps;ppt;pps x;pptx;xls;pdf;mp3;avi;ex
    e;rar;zip;mpg;mpeg;"
    );
  49.  
  50. ?>
strife
1. Jakaś stara ta książka skoro używa $HTTP_GET_VARS, zamień to na $_POST
2. Co się dzieje jak klikasz na usuń jakiś błąd/jaki?
3. Popraw BB Code w poście.
dresik
ogólnie to mi sie wyswietla to:
Warning: unlink(upload/): Is a directory in /home/pyszotka/public_html/karolinka/index.php on line 76
Warning: unlink(upload/): Is a directory in /home/pyszotka/public_html/karolinka/index.php on line 76

nawet po zmianie na $_POST

czasami jakoś tak zmodyfikowałem ze tego nie było, ale po kliknieciu na usun nic sie nie działo (tak jakby parametr nie był przekazywany z linku)

a co do tego: $HTTP_GET_VARS to akurat znalazłem na necie

jak cos to poniżej daje pełne skrypty:

plik: index.php
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
  2. "http://www.w3.org/TR/html4/strict.dtd">
  3. <html>
  4. <head>
  5. <meta name="language" content="pl"> 
  6. <meta http-equiv="Content-Language" content="pl">
  7. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250" />
  8. <title>Upload</title>
  9. <link rel="stylesheet" href="i/style.css" type="text/css">
  10. </head>
  11. <body>
  12. <div id="content">
  13. <center><br /><br /><br />
  14. <form name = "formularz1"
  15. enctype = "multipart/form-data"
  16. action = "skrypt.php"
  17. method = "POST">
  18. <div>
  19. <input type = "file"
  20.  name = "plik1"
  21.  size = "48"
  22.  value = "" />
  23. <input type = "submit" 
  24.  name = "wyslij" 
  25.  value = "Upload" />
  26. </div>
  27. </form></center>
  28. <br /><br />
  29. <table align="center" valign="top width="530">
  30. <tr>
  31. <td width="30" height="20" bgcolor="#d1d1d1"><b>&nbsp;Nr:</b></td>
  32. <td width="380" height="20" bgcolor="#d1d1d1"><b>&nbsp;Nazwa pliku:</b></td>
  33. <td width="120" height="20" bgcolor="#d1d1d1"><b>&nbsp;Rozmiar pliku:</b></td>
  34. <td width="190" height="20" bgcolor="#d1d1d1"><b>&nbsp;Data uploadu:</b></td>
  35. </tr><br><br>
  36. <?php
  37.  
  38.  
  39. function getDir($dir, $extList)
  40. {
  41. if(!($fd = opendir($dir))){
  42. return false;
  43. }
  44. $arr = explode(";", $extList);
  45. foreach($arr as $key => $file){
  46. $arr[$key] = trim($file);
  47. }
  48. $contents = "";
  49.  
  50. while (($file = readdir($fd)) !== false){
  51. if(($file == "..") || ($file == ".")){
  52. continue;
  53. }
  54. $ext = substr($file, strlen($file) - 3, 3);
  55. $ext = strtolower($ext);
  56.  
  57. if(in_array($ext, $arr)){
  58. $i++;
  59. $waga = filesize("upload/$file");
  60. $waga = $waga/1024;
  61. $pozycja = strpos($waga , '.');
  62. $pozycja=$pozycja+4;
  63. $waga=substr($waga, 0, $pozycja);
  64. $time = "upload/$file";
  65. $contents .= '<tr><td width="30" bgcolor="#f5f5f5">&nbsp;'.$i.'</td>';
  66. $contents .= '<td width="380" bgcolor="#f5f5f5">&nbsp;';
  67. $contents .= "<a href="$dir$file">$file</a>";
  68. $contents .= '</td><td width="120" bgcolor="#f5f5f5">&nbsp;'.$waga.' kB</td>';
  69. $contents .= '<td width="190" bgcolor="#f5f5f5">&nbsp;'.date ("d F Y H:i:s", filectime($time)).'</td>';
  70. $contents .= "<td><a href="index.php?id=$file">usun</a></td></tr>";
  71. $contents .= "n";
  72.  
  73. $site = $_POST ['id'];
  74. if(!isset($site)) {
  75. unlink("upload/$site");
  76. }
  77.  
  78. }
  79. }
  80. closedir($fd);
  81. return($contents);
  82. }
  83.  
  84. echo getDir("upload/", "jpg;jpeg;gif;png;bmp;doc;docx;rtf;txt;pps;ppt;ppsx;pptx;xls;pdf;mp3;avi;exe
    ;rar;zip;mpg;mpeg;"
    );
  85.  
  86. ?>
  87. </table></div>
  88.  
  89. <div id="licznik">Strona została otworzona: 
  90. <?php
  91. function getHits()
  92. {
  93. if(($fp = @fopen("i/counter.txt", "r+")) === false)
  94. return false;
  95. $count = fgets($fp);
  96. $count = $count + 1;
  97. fseek($fp, 0);
  98. fputs($fp, $count);
  99. fclose($fp);
  100. return $count;
  101. }
  102. echo(getHits());
  103. ?> razy</div>
  104. </body>
  105. </html>



plik: skrypt.php
  1. <?php
  2.  
  3. $uploaddir = 'upload/';
  4.  
  5. if($_FILES['plik1']['error'] == UPLOAD_ERR_OK){
  6. $new_name = $uploaddir.$_FILES['plik1']['name'];
  7. $temp_name = $_FILES['plik1']['tmp_name'];
  8. if(move_uploaded_file($temp_name, $new_name)){
  9. echo "Plik został załadowany.n";
  10. }
  11. else{
  12. echo "Nieprawidłowy plikn";
  13. }
  14. }
  15. else{
  16. echo("Wystąpił błąd: ");
  17. switch($_FILES['plik1']['error']){
  18. case UPLOAD_ERR_INI_SIZE :
  19. case UPLOAD_ERR_FORM_SIZE :
  20. echo("Przekroczony maksymalny rozmiar pliku!n");
  21. break;
  22. case UPLOAD_ERR_PARTIAL :
  23. echo("Odebrano tylko częśc pliku!n");
  24. break;
  25. case UPLOAD_ERR_NO_FILE :
  26. echo("Plik nie został pobrany!n");
  27. break;
  28. default :
  29. echo("Nieznany typ błędu!n");
  30. }
  31. }
  32. print '<META HTTP-EQUIV="Refresh" CONTENT="3;URL=index.php">';
  33.  
  34. ?>
strife
To wygląda tak, jakby id nie zostało w ogóle przesłane, zobacz w ten sposób:

  1. <?php
  2. // ...
  3. $site = $_POST['id'];
  4. if(isset($site)) {
  5. unlink('upload/' . $site);
  6. }
  7. // ...
  8. ?>


Wtedy jak rozumiem, gdy ktoś skieruje się na ?id=jakis_plik.txt zostanie owy plik wykasowany. Błędy masz oczywiście spowodowane faktem, że nie zostaje przesłana zmienna id albo nie jest widoczna.

~edit
Zauważyłem właśnie, że Ci nie usunie tego pliku bo ten warunek nie zostaje spełniony, musi być isset bez negacji.

@Kicok - Ale ja ślepy jestem, że nie skojarzyłem, że to $_GET heh smile.gif
Kicok
Z tego co widzę, to dane przesyłane są GET'em, a nie POST'em:

Cytat
  1. <?php
  2. $contents .= "<td><a href="index.php?id=$file">usun</a></td></tr>";
  3. ?>



Usuwanie będziesz musiał zrobić mniej więcej tak:
  1. <?php
  2.  
  3. if( isset( $_GET['id'] )
  4. {
  5. $file = basename( $_GET['id'] );
  6.  
  7. if( is_file( "upload/{$file}" ) )
  8. {
  9. // Usuwanie pliku
  10. unlink( "upload/{$file}" );
  11. }
  12. }
  13.  
  14. ?>
dresik
zmodyfikowałem to tak:

  1. <?php
  2. $site = $_GET['id'];
  3. if(isset($site)) {
  4. unlink('upload/' . $site);
  5. }
  6. ?>


ale jeśli klikne na usun to wywala mi takie coś

Warning: unlink(upload/tereryuod.doc): No such file or directory in /home/pyszotka/public_html/karolinka/index.php on line 77

ile plików tyle warningów, po drugim razie jak klikne na usun to juz wywala ten plik, i warningi sie dalej wyswietlają

77 linia to jest ta: unlink('upload/' . $site);
plik ten upload/tereryuod.doc oczywiście istnieje


OK nie trzba już działa wszystko
zrobiłem tak:
  1. <?php
  2. $site = $_GET['id'];
  3. if(isset($site)) {
  4. if( is_file('upload/'. $site) )
  5. {
  6. unlink('upload/' . $site);
  7. }
  8.  
  9. }
  10. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.