Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Ograniczenia uploadu pliku
zaiac
post 9.03.2009, 22:01:07
Post #1





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 11.05.2007
Skąd: Kraków

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


Napisałem sobie krótki skrypcik, który uploaduje pliki na serwer i sprawdza m.in. czy plik spełnia warunek wielkości pliku

  1. <?php
  2. function photoSizeCheck(){
  3.    if($this->size >= _MAX_PHOTO_SIZE){
  4.        return False;
  5.    }
  6.    else {
  7.        return True;
  8.    }    
  9. }
  10. ?>


Oczywiście działa tak jak ma działać, ale moje pytanie brzmi - czy da się w jakiś inny sposób odrzucać próbę uploadu gigantycznego pliku, który zanim się załaduje i dostanę odpowiedź o zbyt dużym rozmiarze pliku to zarżnie cały serwer?
Go to the top of the page
+Quote Post
piotrooo89
post 9.03.2009, 22:04:20
Post #2


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




dużo zależy od konfiguracji serwera. jakie on dopuszcza możliwe uploady plików. jeśli plik będzie miał większą wielkość niż dopuszczona to pojawi się bariera w postaci serwera. można to zmieniać w regułkach .htaccess.


--------------------
Go to the top of the page
+Quote Post
erix
post 9.03.2009, 22:11:17
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
czy da się w jakiś inny sposób odrzucać próbę uploadu gigantycznego pliku, który zanim się załaduje

W php.ini są odpowiednie ustawienia - sprawdź. winksmiley.jpg

Poza tym, możesz jeszcze ustawić stałą (hidden) MAX_FILE_SIZE w formularzu i niektóre przeglądarki powinny wywalić ostrzeżenie, że rozmiar pliku przekracza dopuszczalny.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
zaiac
post 10.03.2009, 14:04:06
Post #4





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 11.05.2007
Skąd: Kraków

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


O ustawieniu w php.ini wiem, ale nie mam dostępu do tego pliku. Spróbuje z ustawieniem maksymalnej wielkości pliku ale czy to nie zadziała też dopiero po załadowaniu pliku?
Go to the top of the page
+Quote Post
piotrooo89
post 10.03.2009, 14:08:06
Post #5


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




plik jest dopiero ładowany na serwer po kliknięciu submita. plik nie zostanie wysłany jeśli jego rozmiar nie będzie taki jak jest ustawione max size. ja polecam Ci również zapozać się z wielkościami plików w .htaccess.


--------------------
Go to the top of the page
+Quote Post
zaiac
post 10.03.2009, 14:12:18
Post #6





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 11.05.2007
Skąd: Kraków

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


hmmm no to jak inaczej uploadowac plik bez kliknięcia sumbita...
Jakieś sprawdzenie wielkości już po wybraniu pliku a przed kliknięciem? Nie bardzo rozumiem - czy mógłbyś proszę wyjaśnić co proponujesz?
Go to the top of the page
+Quote Post
piotrooo89
post 10.03.2009, 14:16:10
Post #7


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




chodzi o to. robisz tak jak napisał ~erix i teraz - jeśli plik przekracza wielkość podaną w tym polu hidden przeglądarka albo wypluwa że plik jest za duży lub w ogóle nie wysyła tego pliku.


--------------------
Go to the top of the page
+Quote Post
zaiac
post 10.03.2009, 14:19:19
Post #8





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 11.05.2007
Skąd: Kraków

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


Hmm w innym temacie:

http://forum.php.pl/lofiversion/index.php/t48135.html

erix napisał że nie da się tego zrobić po stronie przeglądarki. Trochę się zamieszałem smile.gif
Go to the top of the page
+Quote Post
erix
post 10.03.2009, 15:47:36
Post #9





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Napisałem tak, gdyż można to bardzo łatwo obejść, poza tym - nie wszystkie przeglądarki tę wartośc uwzględniają.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
piotrooo89
post 10.03.2009, 21:03:24
Post #10


Newsman


Grupa: Moderatorzy
Postów: 4 005
Pomógł: 548
Dołączył: 7.04.2008
Skąd: Trzebinia/Kraków




i dlatego warto zainteresować się .htaccess'em.


--------------------
Go to the top of the page
+Quote Post
zaiac
post 10.03.2009, 23:46:03
Post #11





Grupa: Zarejestrowani
Postów: 79
Pomógł: 0
Dołączył: 11.05.2007
Skąd: Kraków

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


Panowie, niestety nie dam łatwo za wygraną smile.gif
Uparłem się że obsłużę ten przypadek i ... szukam nadal rozwiązania. W tej chwili wygląda to tak:

  1. <?php
  2. function photoUpload($photo){
  3.  
  4.    if (!is_uploaded_file($photo['tmp_name'])){
  5.        
  6.        echo '<div id="error_message">Wystąpił błąd podczas wysyłania pliku na serwer!</div>';
  7.        switch ($photo['error']){  
  8.             case 1:
  9.                   echo '<div id="error_message">Plik jest większy niż ustawienia serwera.</div>';
  10.                   break;
  11.            case 2:
  12.                   echo '<div id="error_message">Plik jest większy niż pozwalamy na formularzu.</div>';
  13.                   break;
  14.            case 3:
  15.                   echo '<div id="error_message">Tylko część pliku została zapisana.</div>';
  16.                   break;
  17.            case 4:
  18.                   echo '<div id="error_message">Nie wybrano pliku do zapisania.</div>';
  19.                   break;
  20.         }
  21.        @unlink($photo['tmp_name']);
  22.    }
  23.    
  24.    else{
  25.              //normalny upload
  26.          }
  27. ?>


  1. <input type="hidden" name="MAX_FILE_SIZE" value="500000" />
  2. <input type="file" name="_file" size="24"/>


Jak próbuję wrzucić plik 2MB to jest w miarę ok - dostaję odpowiedz z case 2 i wszystko gra. Natomiast jak próbuje wrzucić jakiś film to już gorzej smile.gif Mieli, mieli i mielić nie chce przestać. W jaki sposób można temu zaradzić.
@piotrooo89 - w jaki sposób proponujesz wykorzystać .htaccess?
Go to the top of the page
+Quote Post
Pilsener
post 11.03.2009, 14:58:09
Post #12





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

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


Nic nie poradzisz, przecież nie sprawdzisz, jakiej wielkości plik użytkownik ma zamiar Ci wysłać. To tak samo, jakby sąsiad spuszczał Ci z góry rolkę papieru toaletowego - odbierasz ten papier życia i odbierasz, ale nie wiesz tak naprawdę, ile jest go na rolce, możesz zliczać metry (ograniczenie w php.ini i .htaccess, maksymalna wielkość pliku jaką można wysłać przez POST) albo po odebraniu rolki ją zważyć (ale będziesz ją miał już u siebie w chacie, czyli na serwerze) - to rozwiązanie sprawdzi się, jeśli chcesz ustawić rozmiar mniejszy, niż w php.ini i nie chcesz na stałe zmieniać konfiguracji serwera.

Jest jeszcze jedna opcja: przykręcić kurek z transferem tego pliku, ale nigdy tego nie używałem i nie wiem, czy da się tak zrobić - wtedy plik się pomału ładuje i nie wpływa to tak bardzo na pracę serwera.
Go to the top of the page
+Quote Post
erix
post 11.03.2009, 17:30:00
Post #13





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
odbierasz ten papier życia i odbierasz, ale nie wiesz tak naprawdę, ile jest go na rolce, możesz zliczać metry

Gdybyś napisał skrypt odbierający plik w np. Perlu, to byłaby taka możliwość, gdyż oferuje większe możliwości kontrolowania żądania.


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

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
-wytrwale_szukający-
post 11.06.2013, 15:47:06
Post #14





Goście







Witam.
Wiem, ze temat stary, ale po przejrzeniu kilkudziesięciu podobnych tematów postanowiłem kontynuować wątek.
Znalazłem taki skrypt:
http://stackoverflow.com/questions/3717793...size-validation
a dokładnie tak to działa:
http://jsbin.com/ulamor

Wiem, że w starszych przeglądarkach to nie działa, ale większość ma już nowe, dla tych co mają stare pozostaje czekanie na upload i sprawdzenie po stronie serwera.
Proszę o opinie "czy to jest czegoś warte"

Druga sprawa, jest tam post o sprawdzania w jQuery - czy takie sprawdzanie odbywa się po stronie klienta czy serwera?
Jeśli po stronie klienta to jak dokładnie go użyć? (chodzi o post z oznaczeniem "// Using jquery")

Z góry dziękuję za odpowiedź.
Go to the top of the page
+Quote Post
-wytrwale_szukający--
post 9.07.2013, 19:48:25
Post #15





Goście







Temat oczywiście nieaktualny.
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:08