[ Príspevkov: 13 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
NapísalOffline : 28.05.2010 22:09 | Upload súborov

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?


Offline

Čestný člen
Čestný člen
Upload súborov

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 29.05.2010 9:21 | Upload súborov

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/jpeg.
2. "./" znamena aktualny adresar, je to dobre.


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 29.05.2010 11:21 | Upload súborov

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 jepg :D

Ešte ma napadá, či overovanie tých mime typov je case sensitive?


Offline

Čestný člen
Čestný člen
Upload súborov

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 29.05.2010 11:27 | Upload súborov

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


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 29.05.2010 11:35 | Upload súborov

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!!!


Offline

Čestný člen
Čestný člen
Upload súborov

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 29.05.2010 11:39 | Upload súborov

Ano, image/jpeg. Nevidim, ze by som niekde napisal jepg.


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 29.05.2010 11:44 | Upload súborov

Vy ste majstre napísali image/jpg. A to viac krát za sebou. Napriek výslovnému upozorneniu zo strany moderátora. :D


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 29.05.2010 13:27 | Upload súborov

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>


Offline

Čestný člen
Čestný člen
Upload súborov

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 29.05.2010 13:46 | Upload súborov

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]))


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 29.05.2010 14:09 | Upload súborov

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?? :loony:
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.


Offline

Čestný člen
Čestný člen
Upload súborov

Registrovaný: 11.08.07
Príspevky: 4110
Témy: 30 | 30
Bydlisko: Brno
NapísalOffline : 29.05.2010 14:12 | Upload súborov

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.


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 29.05.2010 14:40 | Upload súborov

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.


Offline

Užívateľ
Užívateľ
Upload súborov

Registrovaný: 05.09.09
Príspevky: 1157
Témy: 127 | 127
Bydlisko: Lehota pod ...
Napísal autor témyOffline : 19.08.2010 19:38 | Upload súborov

****************************************************************************************************************************
****************************************************************************************************************************


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>


 [ Príspevkov: 13 ] 


Upload súborov



Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy.

Upload súborov

v PHP, ASP

1

128

23.02.2015 10:06

BX

V tomto fóre nie sú ďalšie neprečítané témy.

Upload suborov - princip

v PHP, ASP

7

915

04.02.2009 12:09

Blackdevil

V tomto fóre nie sú ďalšie neprečítané témy.

upload suborov-uprava

v PHP, ASP

10

590

01.08.2010 20:14

rover218

V tomto fóre nie sú ďalšie neprečítané témy.

upload suborov na server

v Ostatné

1

1010

28.01.2006 10:54

2010

V tomto fóre nie sú ďalšie neprečítané témy.

upload suborov na stránku

v Webhosting a servery

2

147

05.07.2013 0:35

SnakeBack

V tomto fóre nie sú ďalšie neprečítané témy.

Upload suborov do MySQL

v Databázy

2

372

18.12.2011 19:33

lukas15

V tomto fóre nie sú ďalšie neprečítané témy.

Upload súborov v Mediawiki

v Redakčné systémy

0

364

21.10.2007 13:27

p360t

V tomto fóre nie sú ďalšie neprečítané témy.

Upload iba PHP súborov

v PHP, ASP

4

553

02.09.2009 20:56

Wicky

V tomto fóre nie sú ďalšie neprečítané témy.

ako na upload velkych suborov

v PHP, ASP

2

727

24.07.2009 16:54

jozef.rusnak

V tomto fóre nie sú ďalšie neprečítané témy.

upload suborov na inu domenu

v PHP, ASP

1

271

15.11.2010 20:14

sedlák

V tomto fóre nie sú ďalšie neprečítané témy.

Nefunguje mi script na upload suborov

v PHP, ASP

9

526

22.02.2008 20:44

vl4kn0

V tomto fóre nie sú ďalšie neprečítané témy.

Upload 2 suborov do 2 dirov (pomoc)

v PHP, ASP

2

207

27.12.2009 14:00

rEnEeK

V tomto fóre nie sú ďalšie neprečítané témy.

Ako pridat zopar suborov do image *.nrg suborov?

v Ostatné programy

7

788

30.08.2007 12:33

paulix

V tomto fóre nie sú ďalšie neprečítané témy.

upload

v Bezpečnosť a firewally

6

290

13.07.2011 14:56

fifo102

V tomto fóre nie sú ďalšie neprečítané témy.

Upload

v Ostatné programy

4

693

27.01.2007 13:58

quatermain

V tomto fóre nie sú ďalšie neprečítané témy.

upload

v PHP, ASP

7

491

30.04.2009 21:02

Draex



© 2005 - 2017 PCforum, edited by JanoF