| | |
| Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
Autor | Správa |
---|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal camo: 28.05.2010 22:09 | |
|
Dobrý večer!
Dnes som sa pokúšal rozchodiť upload súborov a skoro by to aj fungovalo, nebyť dvoch mierne čudných vecí...
Mám toto:
Kód: <!DOCTYPE HTML public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <style type="text/css"> #obal{background-color:#ddddff; border:2px outset #9999bb; width:70%; margin:50px auto;} h1{background-color:#bbbbdd; border-top:1px solid #9999bb; padding:7px} </style> <body style="background-color:#ddeeee"> <div id="obal"> <?php if ($_FILES['inputname']['error'] > 0) { switch ($_FILES['inputname']['error']) { case 1 : echo"<h1>Subor presiahol maximalnu moznu valkost uploadu!</h1>"; break; case 2 : echo"<h1>Subor presiahol velkost MAX_FILE_SIZE!</h1>"; break; case 3 : echo"<h1>Subor bol nahraty len ciastocne!</h1>"; break; case 4 : echo"<h1>Subor sa nenahral!</h1>"; break; } exit; } if ($_FILES['inputname']['type']!=('image/gif' or 'image/jpg' or 'image/png')) { die('<h1>Subor nema pozadovany format!</h1>'); } $place='./'.$_FILES['inputname']['name'];
if (is_uploaded_file($_FILES['inputname']['tmp_name'])) { if (!move_uploaded_file($_FILES['inputname']['tmp_name'], $place)) { die('<h1>Subor nieje mozne premiestnit do cieloveho adresara!</h1>'); } } else { die('<h1>Mozny utok, script skonci!</h1>'); }
echo "<h1>Subor bol uspesne nahraty!</h1>";
?> </div> </body> </html> Prvý problém je v tomto riadku(asi): Kód: if ($_FILES['inputname']['type']!=('image/gif' or 'image/jpg' or 'image/png')) Niekde tam musím mať chybu, lebo mi to zožerie aj kadejaké iné súbory, než sú tam vymenované. Keď je tam len jedna možnosť(bez toho or), tak to funguje a filtruje v pohode. Druhý problém mám s týmto riadkom: Kód: $place='./'.$_FILES['inputname']['name'];
Ako mám správne zapísať aktuálny adresár? Niekedy mi to totiž capne uploadovaný súbor úplne mimo a nie do aktuálneho adresára(tam kde je script). Keď tam zadám miesto "./" toto "TEST/" tak funguje v pohode. Čo to je s tým "./" ??
Neviete čo s tým?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 29.05.2010 9:21 | |
|
1. Podmienka je zle, navyse tvoja zatvorkova syntax je zla. Kód: if ($_FILES['inputname']['type'] != 'image/gif' and $_FILES['inputname']['type'] != 'image/jpg' and $_FILES['inputname']['type'] != 'image/png') //alebo lepsie if (!in_array($_FILES['inputname']['type'], array('image/gif', 'image/jpg', 'image/png'))
Okrem toho, MIME typ jpg obrazku je image/jp eg.
2. "./" znamena aktualny adresar, je to dobre.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 29.05.2010 11:21 | |
|
Nechápem...
Veď "and" znamená "a zároveň" predsa?
Ako môže byť nejaký mime typ zároveň gif aj jepg?
To array hádam aj chápem, ale môže mať to array aj meno, že ano? Teda, že by som ho pre poriadok definoval pred tým a dal mu meno....
EDIT:
No už to and chápem. Len si oprav ten j epg
Ešte ma napadá, či overovanie tých mime typov je case sensitive?
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 29.05.2010 11:27 | |
|
Moze mat aj meno.
Ja nemam jepg nikde, ja som napisal jpeg a tak to ma byt spravne, image/jpg neexistuje. Overovanie mime typov samozrejme nie je case sensitive, len porovnavas klasicke retazce.
Inak tvoja kontrola je riadne derava. Odporucam http://blackhole.sk/topicupload-suborov ... if-obrazky
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 29.05.2010 11:35 | |
|
Tak teda jpeg a nie jepg?!
To nieje kontrola pre verejné uploadovanie. Len hrubé chyby.... Útok sa nepredpokladá... To, že to nestačí, som sa samozrejme dočítal....
Vďaka moc!!!
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 29.05.2010 11:39 | |
|
Ano, image/jpeg. Nevidim, ze by som niekde napisal jepg.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 29.05.2010 11:44 | |
|
Vy ste majstre napísali image/jpg. A to viac krát za sebou. Napriek výslovnému upozorneniu zo strany moderátora.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 29.05.2010 13:27 | |
|
No tak som tu zas...
Skúšam ten script rozšíriť, aby vedel spracovať viac súborov, a aj by to fungovalo, ale robí to jednu divnú vec.
K tomu prvému scriptu som pripojil cyklus while a nejaké drobnosti... no a ten while mi robí problémy. Podĺa mńa, ak while vyhodnotí výraz v zátvorke ako false, tak by mal skončiť. Lenže tento môj mi okrem toho vypíše takúto hlášku: Notice: Undefined index: input3 in C:\PHPWebServer\http_docs\upload.php on line 12 (Teda keď nahrávam dva súbory a testuje, či existuje tretí). Nechápem prečo to robí?
Script teraz vyzerá takto:
Kód: <!DOCTYPE HTML public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <style type="text/css"> #obal{background-color:#bbbbee; border:2px outset #9999bb; width:70%; margin:50px auto;} h1{background-color:#ddddff; border-top:1px solid #9999bb; padding:7px} #RED{color:red} </style> <body style="background-color:#ddeeee"> <div id="obal"> <?php $globalka=1; while(is_uploaded_file($_FILES['input'.$globalka]['tmp_name'])) { $input='input'.$globalka; if ($_FILES[$input]['error'] > 0) { switch ($_FILES[$input]['error']) { case 1 : echo"<h1>Subor presiahol maximalnu moznu valkost uploadu!</h1>"; break; case 2 : echo"<h1>Subor presiahol velkost MAX_FILE_SIZE!</h1>"; break; case 3 : echo"<h1>Subor bol nahraty len ciastocne!</h1>"; break; case 4 : echo"<h1>Subor sa nenahral!</h1>"; break; } $globalka++; continue; } if (!in_array($_FILES[$input]['type'], array('image/gif', 'image/jpeg', 'image/png'))) { echo('<h1>Subor <span id="RED">'.$_FILES[$input]['name'].'</span> nema pozadovany format!</h1>'); $globalka++; continue; } $place='./'.$_FILES[$input]['name'];
if (is_uploaded_file($_FILES[$input]['tmp_name'])) { if (!move_uploaded_file($_FILES[$input]['tmp_name'], $place)) { echo'<h1>Subor nieje mozne premiestnit do cieloveho adresara!</h1>'; $globalka++; continue; } } else { die('<h1>Mozny utok, script preto konci!</h1>'); } $globalka++; echo "<h1>Subor ".$_FILES[$input]['name']." bol uspesne nahraty!</h1>"; } ?> </div> </body> </html>
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 29.05.2010 13:46 | |
|
Ano, ved aj to tak funguje, ale ty nikde neoverujes, ci existuje $_FILES['input3']['tmp_name']. Ty sa snazis pouzit tuto neexistujucu premennu ako parameter fcie. Kedze neexistuje, vyhodi sa chyba a ako parameter fcie is_uploaded_file sa pouzije null, pricom is_uploaded_file(null) uz neprejde a preto cyklus nepokracuje. Toto staci:
Kód: while(isset($_FILES['input'.$globalka]))
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 29.05.2010 14:09 | |
|
No dobre, ale funkcia is_uploaded_file() s neplatným parametrom, by mala vracať false, ako som sa dočítal a preto som ju tam dal... Čo iné tá funkcia testuje ak nie existenciu uploadnutého súboru?? Či ako??
Môžeš mi to nejako ozrejmiť? Rád by som to pochopil s tým is_uploaded_file()..., než prejdem na to druhé riešenie.
|
|
Registrovaný: 11.08.07 Príspevky: 4088 Témy: 34 Bydlisko: Brno | Napísal Ďuri: 29.05.2010 14:12 | |
|
No vsak aj vracia false. Ono ten cyklus vobec neprebieha, tebe tu chybu vracia na riadku s podmienkou, ktora sa otestovat musi, aby sa vedelo, ci cyklus prebiehat ma alebo nie.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 29.05.2010 14:40 | |
|
Už hádam chápem. Nerozumel som dobre že ona fcia testuje: if the file named by filename was uploaded via HTTP POST.a nie či exituje daná premenná a musí teda dostať platný parameter....
UF!
Zdá sa, že to funguje. Ešte som síce nevyskúšal všetky nemožné kombinácie, ale v hrubom to funguje.
Vďaka za pomoc.
|
|
Registrovaný: 05.09.09 Príspevky: 1141 Témy: 127 Bydlisko: Lehota pod ... | Napísal autor témy camo: 19.08.2010 19:38 | |
|
**************************************************************************************************************************** ****************************************************************************************************************************
Zdravím!
Nechcem zakladať novú tému, lebo to patrí k tomuto...
Chcem sa niekoho kto tomu dobre rozumie a chce sa mu to čítať, spýtať, či takýto script na upload môže ísť na verejnosť(či môže byť verejne prístupný).
K tomu predošlému som doplnil to čo som našiel na black hole. Tj. kontrolu cez getimagesize() a kontrolu prípony. Trochu som to osekal o nejaké moje doplnky, len dúfam, že podstata ostala celá...
Kód: <html> <body style="background-color:#ddeeee; font-family:tahoma"> <div id="obal">
<?php $globalka=1; while(isset($_FILES['input'.$globalka])) { $input='input'.$globalka; if ($_FILES[$input]['error'] > 0) { switch ($_FILES[$input]['error']) { case 1 : echo"<h1>Subor presiahol maximalnu moznu valkost uploadu!</h1>"; break; case 2 : echo"<h1>Subor presiahol velkost MAX_FILE_SIZE!</h1>"; break; case 3 : echo"<h1>Subor bol nahraty len ciastocne!</h1>"; break; case 4 : echo"<h1>Subor sa nenahral!</h1>"; break; } $globalka++; continue; } //kontrola pripony $whitelist_suffix= array('.gif','.jpg','.jpeg','.png'); $trueORfalse='false'; foreach($whitelist_suffix as $itemsuff) { if (preg_match("/$itemsuff\$/i", $_FILES[$input]['name'])) $trueORfalse='true'; } if ($trueORfalse != 'true') { echo '<h1>Subor <span class="RED">'.$_FILES[$input]['name'].'</span> nema pozadovanu priponu!</h1>'; $globalka++; continue; } //kontrola mime typu cez fciu getimagesize() $whitelist_mime= array('image/gif','image/jpeg','image/png'); $array_gis= getimagesize($_FILES[$input]['tmp_name']); if (!in_array ($array_gis['mime'], $whitelist_mime)) { echo('<h1>Subor <span class="RED">'.$_FILES[$input]['name'].'</span> nema pozadovany format!</h1>'); $globalka++; continue; } //upload $place='./'.$_FILES[$input]['name']; if (is_uploaded_file($_FILES[$input]['tmp_name'])) { if (!move_uploaded_file($_FILES[$input]['tmp_name'], $place)) { echo'<h1>Subor nieje mozne premiestnit do cieloveho adresara!</h1>'; $globalka++; continue; } } else { die('<h1>Mozny utok, script preto konci!</h1>'); } $globalka++; echo "<h1>Subor ".$_FILES[$input]['name']." bol uspesne nahraty!</h1>"; } ?> <a href="UploadForm76UF.php"><b>Nahrať ďalšie</b></a> <hr style="clear:left; color:#bbbbbb"> </div> </body> </html>
|
|
| Stránka: 1 z 1
| [ Príspevkov: 13 ] | |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|