
Nahrát soubor pomocí php nemusí být zrovna jednoduché. Jaké jsou nejběžnější problémy?
- chybné určení cílové složky (nejjednodušší je ukládat kamkoliv do struktury složek od místa volání skriptu)
- ošetření typu dat
- nastavení přístupových práv pomocí chmod()
- nevhodné použití funkce move_uploaded_file()
1 2 3 4 |
<form method="post" action="upload.php" enctype="multipart/form-data"> <input type="file" name="f_novy_soubor" size="25" /> <input type="submit" name="Submit" value=" Odeslat "> </form> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
if($_FILES['f_novy_soubor']['name']) { $valid_file = true; $upload_message = ""; $target_dir = "data/obrazky/"; $soubor = basename($_FILES["f_novy_soubor"]["name"]); $target_file = $target_dir . $soubor; $check = getimagesize($_FILES["f_novy_soubor"]["tmp_name"]); if($check !== false) { $upload_message .= "Obrazová data - " . $check["mime"] . ".<br />"; list($width, $height, $type, $attr) = $check; $upload_message .= "Šířka: ". $width .", výška: ". $height ."<br />"; } else { $upload_message .= "Soubor neobsahuje obrazová data.<br />"; $valid_file = false; } if( !$_FILES['f_novy_soubor']['error']) { if($_FILES['f_novy_soubor']['size'] > (524000)) //nesmí přesáhnout 0,5 MB { $upload_message .= 'Soubor je příliš velký! Nesmí přesáhnout 0,5 MB!.<br />'; $valid_file = false; } if ($width > 600 || $width < 400) { $upload_message .= 'Šířka obrázku musí být mezi 400 až 600 px. <b>Ideálně 567 px!!</b>.<br />'; $valid_file = false; } if ($height > 600 || $height < 400) { $upload_message .= 'Výška obrázku musí být mezi 400 až 600 px. <b>Ideálně 567 px!!</b>.<br />'; $valid_file = false; } if($valid_file) { if(file_exists($target_file)) { chmod($target_file,0755); unlink($target_file); } move_uploaded_file($_FILES['f_novy_soubor']['tmp_name'], $target_file); $upload_message .= 'Soubor byl úspěšně nahrán na web.<br />'; } } else { $upload_message .= 'Během nahrávání souboru došlo k následující chybě: '.$_FILES['f_novy_soubor']['error']; } echo $upload_message."<br />"; } |
Přečtěte si také příspěvek Bezpečnější upload souborů pomocí php.