Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]zmiana nazwy pliku przy uploadzie
Forum PHP.pl > Forum > Przedszkole
adek-
Mam uploader do plików, gdzie chcę zmienić nazwę pliku, tak aby cały czas na serwerze był 1 plik i się nadpisywał, ale nową nazwę dopisuje mi do istniejącej nazwy tworząc "staranazwa.xlsnowanazwa.xls". W zasadzie jeszcze chciałem zrobić tak aby nie ruszało rozszerzenia, bo są przecież też pliki *.xlsx, ale jak zmieni mu do *.xls to przy próbie otwarcia będzie tylko komunikat o innym rozszerzeniu, a plik i tak się uruchomi. No chyba, że da się łatwo odczytać rozszerzenie i zapisać to samo ponownie.

  1. if (!is_dir("upload_files")) {
  2. die ("upload_files directory doesn't exist");
  3. }
  4.  
  5. if ($_FILES['userfile']) {
  6. $message = do_upload($upload_dir, $upload_url);
  7. }
  8. else {
  9. $message = "Invalid File Specified.";
  10. }
  11.  
  12. print $message;
  13.  
  14. function do_upload($upload_dir, $upload_url) {
  15. $temp_name = $_FILES['userfile']['tmp_name'];
  16. $new_name = 'plik';
  17. $new_roz = 'xls';
  18. $file_name = $_FILES['userfile']['name'];
  19. $file_type = $_FILES['userfile']['type'];
  20. $file_size = $_FILES['userfile']['size'];
  21. $result = $_FILES['userfile']['error'];
  22. $file_url = $upload_url.$file_name;
  23. $file_path = $upload_dir.$file_name;
  24.  
  25. //File Name Check
  26. if ( $file_name =="") {
  27. $message = "Invalid File Name Specified";
  28. return $message;
  29. }
  30. //File Size Check
  31. else if ( $file_size > 7000000) {
  32. $message = "The file size is odver 7 Mb.";
  33. return $message;
  34. }
  35. //File Type Check
  36. else if ( $file_type == "text/plain" ) {
  37. $message = "Sorry, You cannot upload any script file" ;
  38. return $message;
  39. }
  40. $result = move_uploaded_file($temp_name, $file_path . $new_name.'.'. $new_roz);
  41. $message = ($result)?"File url <a href=$file_url>$file_url</a>" :
  42. "Coś jest nie tak z uploadem pliku.";
  43. return $message;
  44. }
  45. <form name="upload" id="upload" ENCTYPE="multipart/form-data" method="post">
  46. Upload Image<input type="file" id="userfile" name="userfile">
  47. <input type="submit" name="upload" value="Upload">
  48. </form>
IceManSpy
Rozszerzenie -> patrz linijka 17 -> $new_roz = 'xls';
Nazwa pliku -> patrz linijka 16 -> $new_name = 'plik';
Do zmiany nazwy użyj funkcji rename:
http://php.net/manual/en/function.rename.php
adek-
hmm kurczę nie wiem w które miejsce to dokładnie wstawić bo tam gdzie nie wstawie to wyskakuje mi błąd
"Warning: rename(C:/!WWW/WebServ/temp/file-uploads\phpACA.tmp,Obrazy-Rumin) [function.rename]: No such file or directory in C:\!WWW\WebServ\httpd-users\Obrazy Rumin\admin\simple_upload\simple_upload.php"
jak wstawiam tak kod to on najpierw powinien zuploadować, a dopwiero później zmienić, dobrze myślę?
  1.  
  2. $result = rename(move_uploaded_file($temp_name, $file_path), $new_name);
  3. $message = ($result)?"File url <a href=$file_url>$file_url</a>" :
  4. "Coś jest nie tak z uploadem pliku.";

$new_name = nazwa_pliku // oczywiście bez rozszeżenia, bo to zmieni samą nazwę tak?
IceManSpy tak wiem, wstawiałem je tam właśnie po swojemu, bo myślałem, że takie coś załatwi sprawę wink.gif


#################### edytowano 24.06.2011 #######################
No i działa, dla potomnych jak by chcieli sobie coś podobnego zrobić...

zmienić: $file_url = $upload_url.$file_name; na $file_url = $upload_url.$new_name; i $new_name = 'nazwa.xls';

i kod poniżej. Sprawdza , czy jest plik nazwa.xls jeśli jest to go kasuje, a następnie uploaduje nowy zmieniając jego nazwę z dowolnej na tą podaną w zmiennej $new_name

  1. move_uploaded_file($temp_name, $file_path);
  2. if (file_exists($upload_dir.$new_name)) {
  3. unlink($upload_dir.$new_name);
  4. echo "Plik \"$new_name\" istnieje. Kasowanie starego pliku \"$new_name\" i dodawanie nowego";
  5. } else {
  6. //echo "Plik \"$new_name\" nie istnieje";
  7. }
  8. $result = rename($upload_dir.$file_name, $upload_dir.$new_name);
  9. //$message = ($result)?"... bezposredni link do wgranego pliku to: <a href=$file_url>$file_url</a>" :
  10. "Cos jest nie tak z uploadem pliku.";
  11. return $message;


---- edytowano 28.06.2011

hmm jest jakiś problem, bo nie chce wszystkich plików uploadować... mam limit $file_size > 7000000 który powiększylem nawet do 100000000 i nie chce mi wrzucić pliku ok 5 mb. Z resztą przy podawaniu różnych plików różne komunikaty mi wyrzuca. Np. mały plik *.rar wrzuca i zmienia nazwę bez żadnego monitu, wielki powyżej 10 mb z monitem "Okreslono niewlasciwy plik, badz plik nie zostal jeszcze wybrany", a np plik *.xls ok 5 mb z rownież nie uploaduje jak dużego raru jednak z monitem
"Warning: rename(upload_files/24062011.xls,upload_files/Obrazy-Rumin.xls) [function.rename]: No such file or directory in C:\!WWW\WebServ\httpd-users\Obrazy Rumin\admin\simple_upload.php on line 69"
Od czego zależy różny komunikat? Od wielkości pliku chyba nie, bo rar i xls mają po około 5 mb, rodzaj pliku hmm nie sądzę bo wrzuca wszystko jeśli nie przekraczało mi 1.38 mb (+- jakaś wartość bo następną próbowalem 2.34 i już nie poszło)
  1. move_uploaded_file($temp_name, $file_path);
  2. if (file_exists($upload_dir.$new_name)) {
  3. unlink($upload_dir.$new_name);
  4. echo "Plik \"$new_name\" istnieje. Kasowanie starego pliku \"$new_name\" i dodawanie nowego";
  5. } else {
  6. //echo "Plik \"$new_name\" nie istnieje";
  7. }
  8. $result = rename($upload_dir.$file_name, $upload_dir.$new_name);
  9. //$message = ($result)?"... bezposredni link do wgranego pliku to: <a href=$file_url>$file_url</a>" :
  10. "Cos jest nie tak z uploadem pliku.";
  11. return $message;

linijka 69 ta z błędu powyżej to $result = rename($upload_dir.$file_name, $upload_dir.$new_name);
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.