Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> <input> zmiana nazwy przesyłanego pliku
maxcv5123
post
Post #1





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 5.12.2016

Ostrzeżenie: (10%)
X----


Witam,
Korzystam z tego (https://www.developphp.com/video/JavaScript/File-Upload-Progress-Bar-Meter-Tutorial-Ajax-PHP) gotowego rozwiązania do przesyłania plików na serwer. Dodatkowo sam zrobiłem zapis url pliku do bazy. Mam jednak problem aby każdy plik miał inną nazwę. Chcę uniknąć posiadania na serwerze plików o dwóch identycznych nazwach. I tu pytanie jak to zrobić, aby np oryginalny plik o nazwie 'super pies.mp4' miał nazwę np 'super-pies-*.mp4' gdzie * to aktualna data
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
Niree
post
Post #2





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

Ostrzeżenie: (0%)
-----


Raczej opcji z datą nie polecam. Ktoś może np. wrzucić plik tego samego dnia i jeden plik zastąpi się drugim plikiem (zakładając, że będą one tej samej nazwy).
Bardziej pasowałoby użyć generatora np. 5 losowych znaków z cyfr i liter, wtedy zmniejszy się możliwość zastąpienia pliku.

Ale jeżeli już:

  1. $temp = explode(".", $fileName); //rozdzielamy nazwe pliku od typu ($temp[0] - super pies, $temp[1] - mp4)
  2. $text = str_replace(' ','_',$temp[0]); //zamiana spacji na _ (wynik: $text = super_pies)
  3. $newfilename = "test_uploads/".$text."-".date("Y-m-d").".".end($temp); // ustawiamy ścieżkę i nazwę nowego pliku.
  4. if(move_uploaded_file($fileTmpLoc, $newfilename)){
  5. echo "$fileName upload is complete";
  6. //zapytanie mysql itp
  7. } else {
  8. echo "move_uploaded_file function failed";
  9. }


Wersja z generatorem:

  1. function passwordGenerator($length) {
  2. $uppercase = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'R', 'S', 'T', 'U', 'W', 'Y', 'Z');
  3. $lowercase = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'w', 'y', 'z');
  4. $number = array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
  5.  
  6. $password = NULL;
  7.  
  8. for ($i = 0; $i < $length; $i++) {
  9. $password .= $uppercase[rand(0, count($uppercase) - 1)];
  10. $password .= $lowercase[rand(0, count($lowercase) - 1)];
  11. $password .= $number[rand(0, count($number) - 1)];
  12. }
  13.  
  14. return substr($password, 0, $length);
  15. } //wrzucić nad kodem
  16.  
  17. $temp = explode(".", $fileName); //rozdzielamy nazwe pliku od typu ($temp[0] - super pies, $temp[1] - mp4)
  18. $text = str_replace(' ','_',$temp[0]); //zamiana spacji na _ (wynik: $text = super_pies)
  19. $newfilename = "test_uploads/".$text."-".passwordGenerator(5).".".end($temp); // ustawiamy ścieżkę i nazwę nowego pliku.
  20. if(move_uploaded_file($fileTmpLoc, $newfilename)){
  21. echo "$fileName upload is complete";
  22. //zapytanie mysql itp
  23. } else {
  24. echo "move_uploaded_file function failed";
  25. }


Ten post edytował Niree 5.12.2016, 02:02:25
Go to the top of the page
+Quote Post
Pilsener
post
Post #3





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


A po co tak kombinować?
1. Jeśli zakładamy, że zawsze mamy bazę danych to używamy po prostu ID z bazy - proste i intuicyjne
2. Jeśli dopuszczamy brak bazy to nazwę pliku możemy wygenerować (mamy w tym celu dość szerokie spektrum funkcji oraz dodatków)

Dodatkowo sugeruję aby:
1. Nazwa pliku zawierała tylko ID. Każde doklejanie do nazwy np. panieńskiego nazwiska matki twórcy aplikacji czy też rozszerzenia to dodatkowa komplikacja i utrudnienie.
2. Pliki umieszczać w subfolderach typu: plik abc w subfolderze a/b, plik 123 w subfolderze 1/2. Jak nie wiecie dlaczego, to spróbujcie np. odczytać pliki z folderu, gdzie jest ich kilkadziesiąt milionów. Nie wiem czemu każdy zakłada, że nikt nie będzie tego używał - czasami jednak ludzie wbijają oneeyedsmiley02.png

Oczywiście o takich podstawach jak walidacja czy sprawdzenie, czy mamy odpowiednie prawa przed wywołaniem np. funkcji move_uploaded_files nie trzeba pisać. arrowheadsmiley.png
Go to the top of the page
+Quote Post
maxcv5123
post
Post #4





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 5.12.2016

Ostrzeżenie: (10%)
X----


Cytat(Niree @ 5.12.2016, 01:44:19 ) *
Raczej opcji z datą nie polecam. Ktoś może np. wrzucić plik tego samego dnia i jeden plik zastąpi się drugim plikiem (zakładając, że będą one tej samej nazwy).



Dzięki za pomoc. Dodałbym jeszcze godzinę.
Chyba jednak zdecyduję się na id. Mam pytanie odnośnie wydajności. Do plików zawsze będę znał dokładny adres, nie będą one wyszukiwane itp. jest więc konieczność grupowania ich w podkatalogi? czy mogą być wszystkie w jednym folderze?
I drugie pytanie, czy w kodzie który podałem istnieje możliwość przesłania do pliku file_upload_parser.php dodatkową zmienną php nie podaną w formularzu. Niestety JavaScript to nie moja mocna strona.


Go to the top of the page
+Quote Post
nospor
post
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Do plików zawsze będę znał dokładny adres, nie będą one wyszukiwane itp. jest więc konieczność grupowania ich w podkatalogi?
Tak, jest koniecznosc.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Niree
post
Post #6





Grupa: Zarejestrowani
Postów: 220
Pomógł: 18
Dołączył: 5.02.2016
Skąd: Polska

Ostrzeżenie: (0%)
-----


Cytat(maxcv5123 @ 6.12.2016, 12:22:38 ) *
Dzięki za pomoc. Dodałbym jeszcze godzinę.


  1. date("Y-m-d-G:i:s")


Lepiej faktycznie grupować w katalogi. Zamiast "test_uploads" daj np. ID usera z bazy, albo jeszcze co innego, co mogłoby zidentyfikować użytkownika, który to wrzucił.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 00:38