Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] PHP zmiana nazwy jeśli istnieje (liczbowa)
Forum PHP.pl > Forum > Przedszkole
camilost
Witam, tworzę program, wysyłający za pomocą Delphi.
Otrzymałem taki kod na innym forum, z tym, że chciałbym mieć tak, że jeśli zaistnieje taka sytuacja, że zostanie wgrany plik o tej samej nazwie na mój serwer FTP (dam program tylko adminom serwera i zabezpieczony osobnym hasłem)
To aby dodawało mi do nazwy pliku cyfrę (kolejno), a później i wyświetlało nt. tego pliku (kod poniżej)

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
  2. transitional.dtd">
  3. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  4. <title>? Cannot ?</title>
  5. </head>
  6.  
  7. <div>
  8. <form enctype="multipart/form-data" action="ad1w3a21.php" method="POST">
  9. <input name="plik" type="file" />
  10. <input type="submit" value="Wyślij plik" />
  11. </form>
  12. </div>
  13.  
  14. <?php
  15. if (!empty($_FILES))
  16. {
  17. $plik_tmp = $_FILES['plik']['tmp_name'];
  18. $plik_nazwa = $_FILES['plik']['name'];
  19. $plik_rozmiar = $_FILES['plik']['size'];
  20.  
  21. if(is_uploaded_file($plik_tmp)) {
  22. move_uploaded_file($plik_tmp, "SserwaS/$plik_nazwa");
  23. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  24. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  25. }
  26. }
  27. ?>
  28. </body>
  29. </html>


Znalazłem na googlach taki kod:
  1. function rename_if_exists($dir, $filename) {
  2. $ext = strrchr($filename, '.');
  3. $prefix = substr($filename, 0, -strlen($ext));
  4.  
  5. $i = 0;
  6. while(file_exists($dir . $filename)) { // If file exists, add a number to it.
  7. $filename = $prefix . ++$i . $ext;
  8. }
  9.  
  10. return $filename;
  11. }


Gdy plik jest w temp dir, ma sprawdzić, czy już on jest w folderze SserwaS, jeśli jest zmienić nazwę i przenieść do tamtego folderu, jeśli nie przenieść odrazu smile.gif


Pozdrawiam.

PS. Oczywiście sam próbowałem, ale wychodziło mi to tak (nawet jak dodałem stringa z nową nazwą), że nie wysyłało wog. pliku

@EDIT Poniższy kod przypadkowo skopiowałem, w pliku już go nie miałem oczywiście smile.gif
Kod
<?php
echo '<?xml version="1.0" encoding="iso-8859-2"?>';
?>
Majkelo23
Po co tak kombinujesz? Przy wrzucaniu pliku, doklejaj mu przypadkowe znaki, np. jeśli nazwa pliku to test, podmień mu nazwę na test_3432f3r23f32 i po sprawie. Ja taki skrypcik kiedyś miałem.
camilost
Nie chcę przypadkowych, bo chcę je łatwo odnaleść jako administrator sieci ;/
jaslanin
Do pliku HTML wyświetlasz nagłówek dla pliku XML, dokument XML to nie to samo co HTML.
camilost
Skopiowałem orginalny kod który znalazłem na googlach, a w swoim pliku nie mam tego z XML ^^. Mój błąd smile.gif
Ale to wprawdzie nie ma znaczenia na działanie kodu php ; ((
jaslanin
1. może mieć znaczenie dla działania Twojej przeglądarki bo może uznać że plik XML nie powinien mieć formularzy
2. trochę namieszałem w mojej poprzedniej wypowiedzi bo dopiero zacząłem używać google chrome i translator rozwalił mi stronę

3.

index.php

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-
  2. transitional.dtd">
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-type" content="text/html; charset=iso-8859-2" />
  6. <title>? Cannot ?</title>
  7. </head>
  8. <body>
  9.  
  10. <div>
  11. <form enctype="multipart/form-data" action="" method="POST">
  12. <input name="plik" type="file" />
  13. <input type="submit" value="Wyślij plik" />
  14. </form>
  15. </div>
  16.  
  17. <?php
  18.  
  19. function rename_if_exists($dir, $filename) {
  20. $ext = strrchr($filename, '.');
  21. $prefix = substr($filename, 0, -strlen($ext));
  22.  
  23. $i = 0;
  24. while(file_exists($dir . $filename)) { // If file exists, add a number to it.
  25. $filename = $prefix . ++$i . $ext;
  26. }
  27.  
  28. return $filename;
  29. }
  30.  
  31.  
  32. if (!empty($_FILES))
  33. {
  34. $plik_tmp = $_FILES['plik']['tmp_name'];
  35. $plik_nazwa = $_FILES['plik']['name'];
  36. $plik_rozmiar = $_FILES['plik']['size'];
  37.  
  38. if(is_uploaded_file($plik_tmp)) {
  39. $plik_nazwa = rename_if_exists('dir/', $plik_nazwa);
  40. move_uploaded_file($plik_tmp, "dir/$plik_nazwa");
  41. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  42. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  43. }
  44. }
  45. ?>
  46. </body>
  47. </html>
camilost
Bardzo dziękuję, działa, ja kombinowałem tak:

  1. rename_if_exists('dir/', $plik_nazwa); i mi zwracało 1 :D nie 1.php ani nazwa1.php ^^
  2. if(is_uploaded_file($plik_tmp)) {
  3. move_uploaded_file($plik_tmp, "dir/$plik_nazwa");
  4. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  5. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  6. }


Jeszcze raz bardzo dziękuję panu za pomoc! smile.gif))

Temat do zamknięcia.
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.