Autor | Zpráva | ||
---|---|---|---|
pepe Profil * |
#1 · Zasláno: 28. 12. 2014, 10:22:41
Dobry den, mám skript na uploadovanie suborov všetko fungovalo až dovtedy ked som pridal viac suborov
$velkost = "10000000"; // hodnota v bytoch $validextensions = array("PNG", "jpg", "jpeg", "mp3", "wav", "JPEG", "JPG", "bmp", "BMP", "png", "MP3"); $temporary = explode(".", $_FILES["file"]["name"]); $file_extension = end($temporary); if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "audio/mp3") || ($_FILES["file"]["type"] == "audio/wav") || ($_FILES["file"]["type"] == "image/JPEG") || ($_FILES["file"]["type"] == "image/JPG") || ($_FILES["file"]["type"] == "image/bmp") || ($_FILES["file"]["type"] == "image/BMP") || ($_FILES["file"]["type"] == "image/PNG") || ($_FILES["file"]["type"] == "audio/MP3")) && ($_FILES["file"]["size"] < $velkost)// hodnota v bytoch Approx. 10mb files can be uploaded. (bytes) pokracovanie kodu.... else { echo "<span>***Neplatná veľkosť súboru alebo typ***<span>"; } |
||
Taps Profil |
#2 · Zasláno: 28. 12. 2014, 10:30:41
pepe:
Jaký typ souboru se snažíš uploadovat? Pro otestování je vhodné si vytisknout pole, které se vztahuje k $_FILES <? print_r($_FILES); ?> |
||
pepe Profil * |
#3 · Zasláno: 28. 12. 2014, 10:38:42
obrázky a zvuky
skúšam všetky aj tie ktore sa mi už nahrali a teraz nejdu... to je jpg, JPG ale aj mp3 |
||
Chro_ Profil * |
#4 · Zasláno: 28. 12. 2014, 11:09:38
Hodnota v $_FILES["file"]["type"] se dá podstrčit ze strany nahrávajícího soubor. Kontroluj, zda má soubor v názvu min. jednu tečku funkcí substr_count. Pokud ano, název exploduj podle tečky a vytáhni koncovku funkcí end. Tuto hodnotu prožeň funkcí strtolower (převede případně JPG na jpg). Koncovku porovnej funkcí in_array s hodnotami v poli povolených koncovek, které už v poli nemusí být duplicitní (mp3 vs MP3). Pokud je koncovka obsažena a velikost souboru je do limitu (ale také od limitu - nikdo nechce nulové a jednobajtové soubory), zkontroluj, pokud jde o soubory s příponou jpg, jpeg, bmp, gif, png funkcí getimagesize, zda jde opravdu o obrázek. Jestli ok, soubor ulož. Zvaž možnost uploadu obrazových souborů ve formátu webp od Googlu se stejnou koncovkou.
|
||
Taps Profil |
pepe:
co se týče zvuku, tak soubory mp3 mi vrací níže uvedené type [type] => audio/mpeg . Zkus to přidat do podmínky.
|
||
mimochodec Profil |
#6 · Zasláno: 28. 12. 2014, 15:26:55 · Upravil/a: mimochodec
"ked som pridal viac suborov"
kam jsi pridaval soubory? muj tip: tomu file jsi pridal multiple, chces nahravat vic souboru najednou. To s tim ale musis pracovat jako s polem. |
||
Chro_ Profil * |
#7 · Zasláno: 28. 12. 2014, 15:57:33
Zřejmě jen přidal více mime typů do podmínky if. Za ($_FILES["file"] ["size"] < $velkost) mu chybí ještě jedna uzavírací kulatá závorka, která by měla uzavírat všechny výrazy v if.
|
||
mimochodec Profil |
#8 · Zasláno: 28. 12. 2014, 16:26:37
Taky by mi udelalo radost, kdyby toto nezafungovalo jako cislo: $velkost = "10000000" ; a nasledne porovnani.
To ale asi bohuzel funguje. |
||
pepe Profil * |
podsielam celý kod..
if (isset($_POST['submit'])) { // nastavenia $stranka = "http://nieco.sk"; $priecinok = "myfile/"; $velkost = "10000000"; // hodnota v bytoch $subor = $_FILES["file"]["name"]; // nastavenia end $page = "html obsah...{$stranka}{$priecinok}{$subor}"; //page end $validextensions = array("PNG", "jpg", "jpeg", "mp3", "wav", "JPEG", "JPG", "bmp", "BMP", "png", "MP3"); $temporary = explode(".", $_FILES["file"]["name"]); $file_extension = end($temporary); if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") || ($_FILES["file"]["type"] == "image/jpeg") || ($_FILES["file"]["type"] == "audio/mp3") || ($_FILES["file"]["type"] == "audio/wav") || ($_FILES["file"]["type"] == "image/JPEG") || ($_FILES["file"]["type"] == "image/JPG") || ($_FILES["file"]["type"] == "image/bmp") || ($_FILES["file"]["type"] == "image/BMP") || ($_FILES["file"]["type"] == "image/PNG") || ($_FILES["file"]["type"] == "audio/MP3")) && ($_FILES["file"]["size"] < $velkost)// hodnota v bytoch Approx. 10mb files can be uploaded. (bytes) && in_array($file_extension, $validextensions)) { if ($_FILES["file"]["error"] > 0) { echo "Return Code: " . $_FILES["file"]["error"] . "<br/><br/>"; } else { echo "<span style=\"color:#00da00;\">Váš súbor bol úspešne uložený!</span><a href=\"#tagy\">[Zobraziť tagy]</a><br/>"; if (file_exists($priecinok . $_FILES["file"]["name"])) { echo "<b>Tento súbor už je uložený na našom servery</b><a href=\"#tagy\">[Zobraziť tagy]</a><br>"; echo $page; } else { move_uploaded_file($_FILES["file"]["tmp_name"], $priecinok. $_FILES["file"]["name"]); echo $page; } } } else { echo "<span>***Neplatná veľkosť súboru alebo typ***<span>"; } } |
||
mimochodec Profil |
#10 · Zasláno: 29. 12. 2014, 20:55:19
pepe:
„podsielam celý kod..“ A co s tím? Je to vyřešeno? |
||
Taps Profil |
#11 · Zasláno: 29. 12. 2014, 22:47:00
pepe:
jak vypadá formulář pro nahrávání souboru? |
||
Davex Profil |
pepe:
Prohlížeč bude v MIME typu používat pouze malá písmena a řetězec za lomítkem nemusí odpovídat příponě souboru. Třeba Internet Explorer posílal JPEG obrázky s MIME typem image/pjpeg a PNG obrázky jako image/x-png . Tuším, že MP3 bude mít MIME typ audio/mpeg atd. Navíc lze tuto hodnotu podvrhout a po uložení už záleží jenom na příponě, takže MIME typ moc nemá smysl kontrolovat.
Mimochodem, kontrola poslední přípony ve jméně nahrávaného souboru je nedostatečná, protože některé webhostingy umožňují spouštět i PHP skripty s dvojitou příponou. Např. skript.php.jpg . Také by bylo dobré oříznout všechno před jménem souboru, aby nešel použít útok průniku do adresářů. Ideální by bylo vygenerovat nové bezpečné jméno.
|
||
Časová prodleva: 9 let
|
0