Autor Zpráva
bestik_63
Profil
ahoj,
měl bych dotaz. Snažím se o upload souboru z HTML formuláře a chtěl bych ošetřit případ, kdy uživatel zadá příliš velký soubor než je nastaveno v php.ini.
Uvedu příklad.

post_max_size = 8M
upload_max_filesize = 4M

pokud načtený soubor je 4M-8M, tak tuto větší velikost lze zjistit z $_FILES['jmeno']['error']. S tím by neměl být problém.
Nicméně pokud bude načtený soubor větší než 8M, tak pole $_FILES = null. Pokud chci tedy zdetekovat soubor větší než 8M, musím to buď ošetřit javascriptem nebo do formuláře můžu přidat skrytou proměnnou <input type="hidden" name="upload_file"> a v php pak dám podmínku:
if((isset($upload_file))and(isset($_FILES))){
  if($_FILES == null){  //soubor je příliš velký
  
  }
}
nebo existuje nějaké elegantní řešení jak to ošetřit?
RastyAmateur
Profil
bestik_63:
Přečti si dokumentaci všech error hlášek. Ten error najdeš v $_FILES["name_of_input"]["error"]. Konkrétně tvůj dotaz:
if($_FILES["file"]["error"] == 1){
  die("Přesáhl jste maximální velikost souboru!");
  }
Tomáš123
Profil
RastyAmateur:
Přečti si dokumentaci
Prečítaj si ešte raz otázku...

bestik_63:
Ak chceš detekovať obdržanie formulára, kontroluj „nastavenosť“ mena odosielacieho inputu.
if(isset($_POST['submit']))

Niečo som našiel aj na Stack Overflowe:
It's not obvious how to recognize going over post_max_size. $_POST and $_FILES will be empty, but $_SERVER['CONTENT_LENGTH'] will be > 0. If the client just didn't upload any post variables or files, then $_SERVER['CONTENT_LENGTH'] will be 0.

Použiteľný návrh obsahuje aj php.net.
bestik_63
Profil
RastyAmateur:
ahoj,
manuál jsem si přečetl a proto jsem psal, že s tím nemám problém. Zajímala mě spíše ta otázka, když ta velikost bude větší než je možné přenést přes POST. Na to mi odpověděl víceméně Tomáš123. Takže moc děkuji. Víceméně to co jsem psal prve je asi nejschůdnější řešení. Pokud teda někdo nenapíše, že se to dá řešit elegantnějším způsobem :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0