ďťż

[PHP] Edycja skryptu do wysyłania plików Zmiana nazwy pliku, jeśli plik już istnieje

       

Podstrony


telcocafe

Witam :)
Mam taki skrypt do wysyłania plików na serwer:
<?php $upload_dir = './pliki/'; $maxfilesize = 102400; $send = $HTTP_POST_VARS['send']; $userfile = $HTTP_POST_FILES['userfile']; $phpself = $HTTP_SERVER_VARS['PHP_SELF']; if(isset($send)) { if(is_uploaded_file($userfile['tmp_name'])) { if($userfile['size'] <= $maxfilesize) { if(move_uploaded_file($userfile['tmp_name'], $upload_dir.'/'.$userfile['name'])) echo '<p>Plik został wysłany</p>'; } } } ?> <form action="<?php echo $phpself; ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize; ?>"> <input type="file" name="userfile"> <input type="submit" name="send" value="Wyslij plik"> </form>
Mam teraz problem - jak przerobić ten skrypt, żeby jeśli wysyłany plik już istnieje na serwerze, to zmieniał na inną nazwę (np. dodawał (1))? Np. ktoś wysłał plik plik.txt i gdy ponownie go wyśle, to plik będzie miał nazwę plik(1).txt.
Z góry dziękuję za pomoc.



Poprawiłem trochę kodu, obecnie $HTTP_*_VARS są zastąpione tablicami superglobalnymi $_POST, $_GET itd., wystylizowałem i dodałem fukcję Ci potrzebną. Dodaje ona datę jeżeli dany plik już jest. Powiedzmy, plik się nazywa test.txt, to skrypt podczas wgrywania pliku o takiej samej nazwie zmieni jego nazwę na test(200811172055).txt Kod:
<?php $upload_dir = './pliki/'; $maxfilesize = 102400; $userfile = $_FILES['userfile']; if(isset($_POST['send'])) { if(is_uploaded_file($userfile['tmp_name'])) { if($userfile['size'] <= $maxfilesize) { $file_patch = $upload_dir.'/'.$userfile['name']; if (file_exists($file_patch)) { $extension = explode('.', $userfile['name']); $cnt = count($extension) -2; $file_name = ''; for ($i=0; $i<$cnt; $i++) { $file_name .= $extension[$i]; } $i_ext = count($extension) -1; $file_patch = $upload_dir.'/'.$file_name.'('.date('YmdGi',time()) .').'.$extension[$i_ext]; } if(move_uploaded_file($userfile['tmp_name'], $file_patch)) { echo '<p>Plik został wysłany</p>'; } } } } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize; ?>"> <input type="file" name="userfile"> <input type="submit" name="send" value="Wyslij plik"> </form>
Jakby coś się nie zgadzało, albo nie chodziło jak trzeba - pisz :)
PS. Zamiast po prostu szukać kolejnej wolnej liczby zrobiłem kod tak, aby była w nawiasach data (skrypt nie musi wykonać tyle instrukcji warunkowych = większa szybkość).
Pozdrawiam!
Użytkownik Petermechanic edytował ten post 17 listopad 2008, 20:08
Sprawdziłem i działa tak: wysyłam jakiś plik (np. plik.txt), gdy go wyślę po raz drugi, to ten drugi ma nazwę "(200811172036).txt", więc nie daje plik(200811172036).txt :(. A takie pytanie, jak zapisywać tą datę bez tego, że istnieje plik? :) Czyli np. wysyłam plik.txt i automatycznie mi dodaje (bez sprawdzania, czy taki plik istnieje).
Tak czy inaczej WIELKIE DZIĘKI :)

Już działa, poprawiony kod:
<?php $upload_dir = './pliki/'; $maxfilesize = 102400; $userfile = $_FILES['userfile']; if(isset($_POST['send'])) { if(is_uploaded_file($userfile['tmp_name'])) { if($userfile['size'] <= $maxfilesize) { $file_patch = $upload_dir.'/'.$userfile['name']; if (file_exists($file_patch)) { $extension = explode('.', $userfile['name']); $i_ext = count($extension) -1; $file_name = ''; for ($i=0; $i<$i_ext; $i++) { $file_name .= $extension[$i]; } $file_patch = $upload_dir.'/'.$file_name.'('.date('YmdGi',time()) .').'.$extension[$i_ext]; } if(move_uploaded_file($userfile['tmp_name'], $file_patch)) { echo '<p>Plik został wysłany</p>'; } } } } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize; ?>"> <input type="file" name="userfile"> <input type="submit" name="send" value="Wyslij plik"> </form>

A to, jakbyś w nawiasie zawsze chciał mieć datę:
<?php $upload_dir = './pliki/'; $maxfilesize = 102400; $userfile = $_FILES['userfile']; if(isset($_POST['send'])) { if(is_uploaded_file($userfile['tmp_name'])) { if($userfile['size'] <= $maxfilesize) { $file_patch = $upload_dir.'/'.$userfile['name']; $extension = explode('.', $userfile['name']); $i_ext = count($extension) -1; $file_name = ''; for ($i=0; $i<$i_ext; $i++) { $file_name .= $extension[$i]; } $file_patch = $upload_dir.'/'.$file_name.'('.date('YmdGi',time()) .').'.$extension[$i_ext]; if(move_uploaded_file($userfile['tmp_name'], $file_patch)) { echo '<p>Plik został wysłany</p>'; } } } } ?> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" enctype="multipart/form-data"> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $maxfilesize; ?>"> <input type="file" name="userfile"> <input type="submit" name="send" value="Wyslij plik"> </form>
Pozdrawiam :)



WIELKIE DZIĘKI :) Naprawdę, bardzo pomogłeś :) Wszystko działa :)
Temat do zamknięcia...

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.