Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Sprawdzanie rozmiaru pliku przed przesłaniem, uploader php + renamer
camilost
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 25.02.2010

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


Witam, próbowałem sam sobie zrobić, ale coś mi nie idzie.
Chciałbym, aby przed przesłaniem pliku, sprawdzało jego rozmiar pomiędzy plikiem gotowym już na serwerze

Mój kod:
  1. function rename_if_exists($dir, $filename) {
  2. $ext = strrchr($filename, '.');
  3. $prefix = substr($filename, 0, -strlen($ext));
  4. $rozmiar = filesize($filename);
  5.  
  6. $i = 0;
  7. while(file_exists($dir . $filename)) { // If file exists, add a number to it.
  8. $rozmiar = $plik_rozmiar;
  9. $filename = $prefix . ++$i . $ext;
  10. }
  11.  
  12. return $filename;
  13. }
  14.  
  15.  
  16. if (!empty($_FILES))
  17. {
  18. $plik_nazwa = rename_if_exists('pliki/', $plik_nazwa);
  19. $plik_tmp = $_FILES['plik']['tmp_name'];
  20. $plik_nazwa = $_FILES['plik']['name'];
  21. $plik_rozmiar = $_FILES['plik']['size'];
  22.  
  23. if(is_uploaded_file($plik_tmp)) {
  24. if($rozmiar != $plik_rozmiar) { // probowalem tez z <>
  25. move_uploaded_file($plik_tmp, "pliki/$plik_nazwa");
  26. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  27. }
  28. }
  29. }


Ciągle przesyła pliki o tych samych rozmiarach.

Ten post edytował camilost 12.04.2012, 17:32:04
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
nospor
post
Post #2





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




$rozmiar = $plik_rozmiar;

A magiczną zmienną $plik_rozmiar to niby skad bierzesz?
Go to the top of the page
+Quote Post
camilost
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 25.02.2010

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


Dałem
  1. $plik_rozmiar = $_FILES['plik']['size'];
przed funkcją i dalej nici, kombinowałem
dalej nici, nie potrafię dobrze zbudować tego ;/
Ktoś pomoże? (IMG:style_emoticons/default/sad.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




No ale co przed funkcją... poczytaj w manualu o zasięgu zmiennych. Masz tam to dokładnie wyjaśnione.
Go to the top of the page
+Quote Post
redeemer
post
Post #5





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


W ogóle ten skrypt wygląda jak jakiś chaotyczny zlepek (IMG:style_emoticons/default/wacko.gif) , ale jeżeli dobrze zrozumiałem idee to:
Linia 4 i 8 do zmiany na
  1. $rozmiar = filesize($dir . $filename);

W funkcji zwróć sobie i rozmiar pliku i "wolną" nazwę:
  1. return array('filesize'=>$rozmiar,'filename'=>$filename);
Linia 18 zmiana na:
  1. list($rozmiar, $plik_nazwa) = rename_if_exists('pliki/', $_FILES['plik']['name']);
Linia 20 do wywalenia.

Ten post edytował redeemer 12.04.2012, 14:07:44
Go to the top of the page
+Quote Post
camilost
post
Post #6





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 25.02.2010

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


@nospor, właśnie też kombinowałem, ale albo coś innego źle zrobiłem i nic mi nie zwracało, albo gdzieś indziej błąd popełniałem.
Złe kombinowanie (IMG:style_emoticons/default/sad.gif)
@redeemer Wciąż źle (IMG:style_emoticons/default/sad.gif) Nie wiem co dalej (IMG:style_emoticons/default/sad.gif) próbowałem też różnie przestawiaać/zamieniać. Wyniki były 3
1. Wyskakuje 'Array' zamiast nazwy piku oraz rozmiar
2. Nic nie wyskakuje w obu
3. Wyskakuje nazwa podstawowa (taka jaką wysyłam),a błąd z rozmiarem
Być może źle wkleiłem kod? ; / I były nietrafne moje próby? Można prosić o aktualizację powyższych co do poniższego? Próbowałem już wiele razy, lecz bez skutku (IMG:style_emoticons/default/sad.gif) (.
Próbuję coś stworzyć, ale nawet manual np. o list i wiele przykładów z google, za wiele mi nie dały do myślenia (IMG:style_emoticons/default/sad.gif)

Powinno: zmieniać nazwę pliku, jeśli już istnieje na $i++, gdy rozmiar pliku, który jest pod tą samą nazwą początkową: $plik_nazwa = $_FILES['plik']['name']; jest inny od aktualnego przesyłać plik.
W innym wypadków, usuwać plik tymczasowy, a orginału o tym samy rozmiarze i nazwie nie nadpisywać.

Oryginalny kod :
  1. <?php
  2. function rename_if_exists($dir, $filename) {
  3. $ext = strrchr($filename, '.');
  4. $prefix = substr($filename, 0, -strlen($ext));
  5.  
  6. $i = 0;
  7. while(file_exists($dir . $filename)) { // If file exists, add a number to it.
  8. $filename = $prefix . ++$i . $ext;
  9. }
  10. return $filename;
  11. }
  12.  
  13.  
  14. if (!empty($_FILES))
  15. {
  16. $plik_nazwa = $_FILES['plik']['name'];
  17. $plik_nazwa = rename_if_exists('pliki/', $plik_nazwa);
  18. $plik_tmp = $_FILES['plik']['tmp_name'];
  19. $plik_rozmiar = $_FILES['plik']['size'];
  20.  
  21. if(is_uploaded_file($plik_tmp)) {
  22. move_uploaded_file($plik_tmp, "pliki/$plik_nazwa");
  23. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  24. }
  25. }
  26. ?>


Dobranoc wszystkim (IMG:style_emoticons/default/smile.gif) )

Ten post edytował camilost 13.04.2012, 07:41:29
Go to the top of the page
+Quote Post
IProSoft
post
Post #7





Grupa: Zarejestrowani
Postów: 479
Pomógł: 97
Dołączył: 6.09.2011
Skąd: php.net :)

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


Nie do końca rozumiem Twoje zdanie w którym piszesz co robić jeśli plik istnieje i ma ten sam rozmiar, wg schematu nic nie robić więc tak jest:

  1. function rename_if_exists($dir, $filename) {
  2. $ext = strrchr($filename, '.');
  3. $prefix = substr($filename, 0, -strlen($ext));
  4. $rozmiar = 0;
  5.  
  6. $i = 0;
  7. while(file_exists($dir . $filename)) { // If file exists, add a number to it.
  8. $rozmiar = filesize($dir . $filename); // rozmiar zwracamy dopiero gdy plik istnieje
  9. $filename = $prefix . ++$i . $ext;
  10. }
  11.  
  12. return array(
  13. 'filesize' => $rozmiar,
  14. 'filename' => $filename
  15. );
  16. }
  17.  
  18.  
  19. if (!empty($_FILES))
  20. {
  21.  
  22. $array = rename_if_exists('pliki/', $_FILES['plik']['name']);
  23. $plik_tmp = $_FILES['plik']['tmp_name'];
  24. $plik_nazwa = $_FILES['plik']['name'];
  25. $plik_rozmiar = $_FILES['plik']['size'];
  26.  
  27. if(is_uploaded_file($plik_tmp)) {
  28. if($array['filesize'] != $plik_rozmiar){
  29. move_uploaded_file($plik_tmp, "pliki/$plik_nazwa");
  30. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  31. }
  32. }
  33. }
Go to the top of the page
+Quote Post
camilost
post
Post #8





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 25.02.2010

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


Niestety, może Twój kod zadziałał co do tego co chciałem, ale nazwy nie zmieniał, gdy plik innej wielkości ).
Odkrył się nowy problem, który sam rozwiązałem (mam nadzieję, że w miarę dobrze) - proszę zobaczyć(porównać) linie:

Musiałem zmienić na takie, i wszystko działa należycie!
  1. $array = rename_if_exists('pliki/', $_FILES['plik']['name']);
  2. $plik_nazwa = $array['filename'];
  3. $plik_tmp = $_FILES['plik']['tmp_name'];
  4. $plik_rozmiar = $_FILES['plik']['size'];


Proszę o zamknięcie tematu.

Ten post edytował camilost 14.04.2012, 11:18:42
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: 24.08.2025 - 23:02