Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Zmiana nazwy pliku wysyłanego na serwer
Carveth
post
Post #1





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

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


Witam.

Mam taki problem, robię skrypt w którym wgrywamy jakiś plik na serwer, by uchronić przed nadpisaniem go chcę by przy ponownym wgraniem go była zmieniona nazwa - dokładnie do nazwy dodana np. (1) i tak dalej.

Napisałem taki kod:

  1. $plik = $_FILES['plik']['tmp_name'];
  2. $nazwa = $_FILES['plik']['name'];
  3.  
  4. $ext = getExtension($nazwa);
  5. $file = $katalog.'/'.$nazwa;
  6. if (is_file($file)) {
  7. $typile = strlen($ext);
  8. $typile = $typile+1;
  9. $nazwa = substr($nazwa, 0, -$typile);
  10. $nazwa = $nazwa.'(1).'.$ext;
  11. $file = $katalog.'/'.$nazwa;
  12. if (is_file($file)) {
  13. $typile = $typile+1;
  14. $nazwa = substr($nazwa, 0, -$typile);
  15. $kopia = substr($nazwa, -1);
  16. $kopia = $kopia+1;
  17. $nazwa = substr($nazwa, 0, -1);
  18. $nazwa = $nazwa.$kopia.').'.$ext;
  19. }
  20. }


Usuwa on rozszerzenie pliku z nazwy wraz znakiem "." zostawiając samą nazwę pliku (tzn z "obraz.jpg" robi mi "obraz") i później dodaje w nawiasie liczbę (tzn "obraz(1)") a na sam koniec dodaje rozszerzenie z powrotem (tzn. "obraz(1).jpg).
Niestety problem pojawia się w tym rozwiązaniu że wgrywając kilkakrotnie plik "obraz.jpg" tworzy się "obraz(1).jpg" i "obraz(2).jpg a później cały czas nadpisuje się jako "obraz(2).jpg".

Prosiłbym o jakieś rozwiązanie pozwalające mi wgrywanie plików już o istniejącej nazwie by w nawiasie liczba nie zatrzymywała się na 2 lecz szła w górę.

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
nospor
post
Post #2





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




$typile masz zwiekszac w petli dopóki istnieje dany plik z $typile. I po sprawie.
Go to the top of the page
+Quote Post
Carveth
post
Post #3





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

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


A jak powinno to wyglądać? Prosiłbym o kod (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




Pętla WHILE a w niej masz robic dokładnie to samo co teraz tylko nie dwa razy (teraz robisz to samo dwa razy) a raz. Dzieki pętli bedzie się to robiło az trafi na właściwą wartosc.
Go to the top of the page
+Quote Post
Carveth
post
Post #5





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

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


  1. $plik = $_FILES['plik']['tmp_name'];
  2. $nazwa = $_FILES['plik']['name'];
  3.  
  4. $ext = getExtension($nazwa);
  5. $file = $katalog.'/'.$nazwa;
  6. if (is_file($file)) {
  7. $typile = strlen($ext);
  8. $typile = $typile+1;
  9. $nazwa = substr($nazwa, 0, -$typile);
  10. $nazwa = $nazwa.'(1).'.$ext;
  11. $file = $katalog.'/'.$nazwa;
  12. while (is_file($file)):
  13. $typile = $typile+1;
  14. $nazwa = substr($nazwa, 0, -$typile);
  15. $kopia = substr($nazwa, -1);
  16. $kopia = $kopia+1;
  17. $nazwa = substr($nazwa, 0, -1);
  18. $nazwa = $nazwa.$kopia.').'.$ext;
  19. endwhile;
  20. }


I kończy się na Fatal error: Maximum execution time of 30 seconds exceeded in ... i linijka - $nazwa = $nazwa.$kopia.').'.$ext;
Prosiłbym o wyrozumiałą pomoc, w pętlach jestem niemalże zielony
Go to the top of the page
+Quote Post
nospor
post
Post #6





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




No ale $file ma się zmieniać w petli a u ciebie tego nie ma. WIec ciagle warunek w while operujesz na tej samej nazwie.

edit down: konkretne odpowiedzi dostawałeś. A to co ty tak naprawdę chcesz to zrobiony za Ciebie kod.
Powód edycji: [nospor]:
Go to the top of the page
+Quote Post
Carveth
post
Post #7





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 20.02.2008

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


Więc jak powinno być? Prosiłbym o konkretne odpowiedzi
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 15:42