Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Upload plików
Forum PHP.pl > Forum > PHP
micnor
Witam, na swojej stronie używam takiego formularza do uploadowania plików
Kod
<?php
$dir = 'uploads/';
$max_file_size = 30000000;
$change_name = false; $name_length = 55;

if(!file_exists($dir)) exit('Katalog '.$dir.' nie istnieje!');

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['upload'])) {

    $tmp_name = $_FILES['userfile']['tmp_name'];
    $name = $_FILES['userfile']['name'];
    $type = $_FILES['userfile']['type'];
    $size = $_FILES['userfile']['size'];
    $error = $_FILES['userfile']['error'];
  
    $explode_name = explode('.',$name);
    $extension = @$explode_name[1];
  
    if($change_name) {
        $name = $explode_name[0];
        $new_name = substr(md5($name),0,$name_length).'.'.$extension;
        $path = $dir.$new_name;
    }
    else {
        $path = $dir.$name;
    }
  
    $dirname = dirname($_SERVER['SCRIPT_NAME']) == '/' || dirname($_SERVER['SCRIPT_NAME']) == '\\' ? null : dirname($_SERVER['SCRIPT_NAME']);
  
    $full_path = 'http://'.$_SERVER['HTTP_HOST'].$dirname.'/'.$path;
  
    if($error == UPLOAD_ERR_NO_FILE) {
        echo 'Wybierz plik.';
    }
    elseif($error == UPLOAD_ERR_PARTIAL) {
        echo 'Błąd! Plik został tylko częściowo załadowany.';
    }
    elseif($error == UPLOAD_ERR_NO_TMP_DIR) {
        echo 'Błąd! Brak folderu tymczasowego.';
    }
    elseif($error == UPLOAD_ERR_INI_SIZE) {
        echo 'Błąd! Plik jest za duży dla serwera.';
    }
    elseif($size > $max_file_size) {
        echo 'Za duży plik.';
    }
    else {
  
        if(is_uploaded_file($tmp_name)) {
      
            if(move_uploaded_file($tmp_name,$path)) {
                echo 'Plik został wysłany. <br /><a href="'.$full_path.'">'.$full_path.'</a><br><br>';
            }
            else {
                echo 'Nie udało się wysłać pliku. Spróbuj później.';
            }
    
        }
        else {
            echo 'Co ty próbujesz.';
        }
  
    }
      
}

?>
<center>
<form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" enctype="multipart/form-data">
    <input type="file" name="userfile" />
    <input type="submit" name="upload" value="Wy¶lij" />
</form>
</center>

Oczywiście działa ale problem jest taki gdy chce wgrać plik na serwer o tej samej nazwie to za każdym razem plik zostaje zastąpiony nowym.
Czy ktoś może mi podpowiedzieć co zmienić w kodzie by plik o tej samej nazwie był zamieniany na nazwę np z : obraz.jpg na obraz(1).jpg i dalej obraz(2).jpg
Dziękuję za jakąkolwiek pomoc!
Arcioch
Za pomocą funkcji file_exist() przed przeniesieniem sprawdź czy taki plik już istnieje w danym katalogu smile.gif Jeżeli nie istnieje to wtedy move_uploaded_file() w przeciwnym wypadku zmiana nazwy pliku smile.gif
micnor
dzięki za odp. tylko gdzie i co wstawić w kod, za bardzo nie wiem od czego zacząć?
Arcioch
Skoro już zmieniasz nazwę pliku to rób to tak by się nie mogła powtórzyć smile.gif Przykład:

  1. <?php
  2. $dir = 'uploads/';
  3. $max_file_size = 30000000;
  4. $change_name = false; $name_length = 55;
  5.  
  6. if(!file_exists($dir)) exit('Katalog '.$dir.' nie istnieje!');
  7.  
  8. if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['upload'])) {
  9.  
  10. $tmp_name = $_FILES['userfile']['tmp_name'];
  11. $name = $_FILES['userfile']['name'];
  12. $type = $_FILES['userfile']['type'];
  13. $size = $_FILES['userfile']['size'];
  14. $error = $_FILES['userfile']['error'];
  15.  
  16. $explode_name = explode('.',$name);
  17. $extension = @$explode_name[1];
  18.  
  19. if($change_name) {
  20. $name = $explode_name[0];
  21. $new_name = substr(md5(date("d.m.Y.H.i.s").rand(1,1000000)) , 0 , 10).'.'.$extension;
  22. $path = $dir.$new_name;
  23. }
  24. else {
  25. $path = $dir.$name;
  26. }
  27.  
  28. $dirname = dirname($_SERVER['SCRIPT_NAME']) == '/' || dirname($_SERVER['SCRIPT_NAME']) == '\\' ? null : dirname($_SERVER['SCRIPT_NAME']);
  29.  
  30. $full_path = 'http://'.$_SERVER['HTTP_HOST'].$dirname.'/'.$path;
  31.  
  32. if($error == UPLOAD_ERR_NO_FILE) {
  33. echo 'Wybierz plik.';
  34. }
  35. elseif($error == UPLOAD_ERR_PARTIAL) {
  36. echo 'Błąd! Plik został tylko częściowo załadowany.';
  37. }
  38. elseif($error == UPLOAD_ERR_NO_TMP_DIR) {
  39. echo 'Błąd! Brak folderu tymczasowego.';
  40. }
  41. elseif($error == UPLOAD_ERR_INI_SIZE) {
  42. echo 'Błąd! Plik jest za duży dla serwera.';
  43. }
  44. elseif($size > $max_file_size) {
  45. echo 'Za duży plik.';
  46. }
  47. else {
  48.  
  49.  
  50. if(is_uploaded_file($tmp_name)) {
  51.  
  52. if(move_uploaded_file($tmp_name,$path)) {
  53. echo 'Plik został wysłany. <br /><a href="'.$full_path.'">'.$full_path.'</a><br><br>';
  54. }
  55. else {
  56. echo 'Nie udało się wysłać pliku. Spróbuj później.';
  57. }
  58.  
  59. }
  60. else {
  61. echo 'Co ty próbujesz.';
  62. }
  63.  
  64. }
  65.  
  66. }
  67.  
  68. ?>
  69. <center>
  70. <form action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post" enctype="multipart/form-data">
  71. <input type="file" name="userfile" />
  72. <input type="submit" name="upload" value="Wyślij" />
  73. </form>
  74. </center>


Wracając do Twojego pytania musisz to sprawdzić przed przeniesieniem pliku czyli tutaj smile.gif

  1.  
  2. if(!file_exists($path)){
  3. if(is_uploaded_file($tmp_name)) {
  4.  
  5. if(move_uploaded_file($tmp_name,$path)) {
  6. echo 'Plik został wysłany. <br /><a href="'.$full_path.'">'.$full_path.'</a><br><br>';
  7. }
  8. else {
  9. echo 'Nie udało się wysłać pliku. Spróbuj później.';
  10. }
  11.  
  12. }
  13. else {
  14. echo 'Co ty próbujesz.';
  15. }
  16. }else{
  17. // tu zmiana nazwy jak plik istnieje :)
  18. }
  19.  
micnor
Dziękuję bardzo, działa!
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.