Autor Zpráva
Jindra Erko
Profil *
Chci povolit uživatelům fotogalerii na mém prvním realizovaném webu , ale jelikož lidi jsou šíleně nedůslední a jsou schopni mi nahrávat na web i 12 MB nezmenšené fotky chtěl bych v rámci uploadu pořešit maximální limit cca na 1 až 2 MB.
Jak se to má správně realizovat? Předpokládám že server dopředu nepozná jak velký bude soubor, takže jediná šance je zpustit průběh nahrávání (klasicky přes formulář enctype="multipart/form-data") a v průběhu načítání až server zjistí že už přenesl 1 MB dat, pozastavit přenos a vyhodit chybovou hlášku?
Nebo se to dělá jinak, chytřeji?

Jsem začátečník a tak se ptám na ideální řešení, jde jen o soubry JPG a PNG.
Jakou funkcí mám počítat kolik bajtů už bylo přeneseno?

Vím že existují i tyto nastvaení.

php_value upload_max_filesize 100M
php_value post_max_size 105M
php_value memory_limit 110M

Je možné je měnit extra pro jediný adresář, respektive budu mít strom:

mujserver.cz/fotky/uzivatel-1/2017/7/foto-1.jpg
mujserver.cz/fotky/uzivatel-2/2017/8/foto-1.png

Tak kam příp. nahrát .htaccess příkazy a jakým způsobem, díky.

Díky moc.
Keeehi
Profil
Jindra Erko:
Jakou funkcí mám počítat kolik bajtů už bylo přeneseno?
Nic takového nejde, alespoň ne u apache. Ten totiž funguje tak, že nejdříve počká na dokončení celého přenosu dat od uživatele a pak teprve zavolá PHP script. V té době už je tedy celý soubor nahrán na serveru.

Řešením je to násilné ukončování neřešit. Samozřejmě je potřeba na serveru nastavit správné limity a je dobré i v PHP kontrolovat velikost nahraného souboru. Určitě je také potřeba tento limit napsat na stránku, nejlépe přímo nad input pro nahrávání souborů. Pro lidi s novým prohlížečem můžeš přidat ještě javascriptovou kontrolu. Ti co mají prohlížeč starší si prostě počkají, až obrázek nahranou celý a server jim to zamítne.
pcmanik
Profil
Jindra Erko:
Na strane JavaScriptu na to slúži File API s podporou od IE 10+.

Samozrejme nesmieš zabudnúť ani na kontrolu na serveri.

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: