Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Upload plików. Nadpisywanie tego "samego" pliku.
Forum PHP.pl > Forum > Przedszkole
pablo7890
Witam,
mój problem jest następujący:
mam skrypcik do uploadu plików, wszystko gra i jest prawie świetnie. Jedynym jak na razie, mankamentem jest to, że pliki o tej samej nazwie są nadpisywane, tzn. jak wrzucę plik test.txt, a na serwerze już istnieje plik o tej nazwie, ten stary zostanie nadpisany na świeży. Chciałbym aby nowy plik nie nadpisywał starego, tylko dostawał z przodu nazwy jakiś znak, cyfrę, datę, cokolwiek. Najlepiej datę z dokładną godziną. Jak to zrobić?

Pozdrawiam,
pablo7890

PS
Albo ewentualnie, żeby nazwa pliku była zmieniana automatycznie na aktualną datę i godzinę, ważne, żeby zostało prawidłowe rozszerzenie biggrin.gif
blooregard
Najpierw sprawdzasz, czy plik o danje nazwie już istnieje na serwerze, jeśli tak, to PRZED wysłąniem nowego doajesz mu jakiś prefix, np. czas z time().
pablo7890
Dzięki, ale chyba coś źle zrobiłem. A, nie napisalem, że korzystam z Smarty. Nie wiem, co może tu być źle napisane:

upload.php
  1. <?php
  2.  
  3. include("config.php");
  4.  
  5. if($_POST['submit']) {
  6.  
  7. $plik_tmp = $_FILES['plik']['tmp_name'];
  8. $plik_nazwa = $_FILES['plik']['name'];
  9. $plik_rozmiar = $_FILES['plik']['size'];
  10.  
  11. if(file_exists("upload/" . $plik_nazwa)) {
  12. $smarty->assign('exists', 'exists');
  13. }
  14. if(is_uploaded_file($plik_tmp)) {
  15. move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  16.  
  17. $smarty->assign('nazwa_pliku', $plik_nazwa);
  18. $smarty->assign('rozmiar_pliku', $plik_rozmiar);
  19. }
  20.  
  21. }else{
  22. $smarty->display("upload.tpl");
  23. }
  24. ?>


upload.tpl
  1. {include file="header.tpl"}
  2.  
  3. {if $exists}
  4. Taki plik już istnieje. Zmień nazwę!
  5. {/if}
  6. {if $nazwa_pliku}
  7. Plik <b>{$nazwa_pliku}</b> o rozmiarze <b>{$rozmiar_pliku}</b> bajtow, został pomyślnie zapisany na serwerze! Wyślij następny plik:
  8. {/if}
  9.  
  10. <form enctype="multipart/form-data" action="upload.php" method="POST">
  11. <input type="hidden" name="MAX_FILE_SIZE" value="5000000000" />
  12. <input name="plik" type="file" /><br />
  13. <input type="submit" value="Wyślij plik" />
  14. </form>
  15. {include file="footer.tpl"}
blooregard
  1.  
  2. if(file_exists("upload/" . $plik_nazwa)) {
  3. $smarty->assign('exists', 'exists');
  4. }
  5. if(is_uploaded_file($plik_tmp)) {
  6. move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  7.  
  8. $smarty->assign('nazwa_pliku', $plik_nazwa);
  9. $smarty->assign('rozmiar_pliku', $plik_rozmiar);
  10. }
  11.  


Przecież nadpisujesz go, mimo tego, że $exists będzie true.
To, że w Smarty wyświetlasz info o istniejącym pliku nie ma już znaczenia. To w PHP musisz obsłużyć sprawdzanie, czy plik istnieje.

pablo7890
OK, jednak nawet bez tego sprawdzania (file_exists()) skrypt przestał działać. W ogóle nie wysyła plików na serwer. Po kliknięciu Wyślij, strona się jedynie odświeża.

EDIT
Ok, problem rozwiązałem. Serdecznie dziękuję wszystkim za pomoc.
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.