Autor | Zpráva | ||
---|---|---|---|
johanies Profil * |
#1 · Zasláno: 11. 8. 2007, 19:07:54
Můžete mi prosím poradit, proč mi nefunguje následující script na serveru, přitom na lokálu běží normálně?
Nejsem v php příliš zběhlý a toto je první dotaz, který sem zadávám tak, prosím tolerujte případné nedostatky mého dotazu i scriptu... //formulář <form enctype="multipart/form-data" action="" method="post"> <input type="hidden" name="page" value="upload"> <input type="hidden" name="MAX_FILE_SIZE" value="100000000"> Soubor: <input name="userfile" type="file"> <input type="submit" value="Nahrát soubor"> </form> //a samotný script (osekaný o většinu zbytečností) <?php do { if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { copy($_FILES['userfile']['tmp_name'], "tmp/file"); list($width, $height) = getimagesize($_FILES["userfile"]["tmp_name"]); $sirka=round($width/118); $vyska=round($height/118); $koef=($height/$width); } else { echo "<div id='vystraha'>"; echo "upload nebyl proveden"; echo "</div>"; break; } if (isset($_FILES['userfile']['name'])) { $soubor=$_FILES['userfile']['name']; move_uploaded_file($_FILES['userfile']['tmp_name'], "soubory/$soubor"); } else { echo "<div id='vystraha'>"; echo "soubor nebyl uložen"; echo "</div>"; break; } if (file_exists("soubory/$soubor")){ //hlavni akce } else { echo "<div id='vystraha'>"; echo "přinahrávání souboru se vyskytla chyba"; echo "</div>"; break; } echo "<div id='vystraha'>"; echo "soubor $soubor byl nahrán na server"; echo "</div>"; } while(0); ?> |
||
johanies Profil * |
#2 · Zasláno: 11. 8. 2007, 19:08:35
podotýkám, že chmod mám nastavený na 0777
|
||
v6ak Profil |
#3 · Zasláno: 11. 8. 2007, 19:24:01 · Upravil/a: v6ak
<input type="hidden" name="MAX_FILE_SIZE" value="100000000"> Toto tam je asi na nic. Max. velikost souboru IMHO takto nezvýšíte. A pokud byste se jí takto snažil(a) snížit (vzhledem k číslu nepředpokládám), chtělo by to kontrolu na serveru, jinak to lze jednoduše obejít. if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { Na co je to dobré? copy($_FILES['userfile']['tmp_name'], "tmp/file"); Nemusíte mít přístup pro copy. Má se používat move_uploaded_file... // správně je ./tmp/file BTW: Nemůže nahrávat více lidí zaráz move_uploaded_file($_FILES['userfile']['tmp_name'], "soubory/$soubor"); Co kdyby soubor měl příponu php nebo podobně? echo "soubor $soubor byl nahrán na server"; Tady to asi moc nehrozí, ale víte něco o (HTML) injekci? |
||
v6ak Profil |
#4 · Zasláno: 11. 8. 2007, 19:25:47
BTW: příště použijte tag pre:
váš |
||
johanies Profil * |
#5 · Zasláno: 11. 8. 2007, 19:59:53
to v6ak: díky za připomínky
o té injekci nemám ani potuchy...zkusím si o tom něco přečíst... copy teda vyhodím...myslel jsem že to je nutný krok (ani nevím proč...ale viděl jsem to takhle použité na php.net) cestu jsem opravil na ./tmp/file (kupodivu mi to takhle napsané nefungovalo na lokálu.......?) a ty koncovky ještě ošetřím, na to jsem myslel... nicméně ten upload jsem stejně nevyřešil.. |
||
epsík Profil |
#6 · Zasláno: 11. 8. 2007, 20:46:41
ještě jsem si nechal vypsat $_FILES a dostal jsem vypis:
Array ( [userfile] => Array ( [name] => veminko8.png [type] => image/png [tmp_name] => D:TmpuploadphpCD28.tmp [error] => 0 [size] => 22580 ) ) nemohl by mi to někdo pomoci objasnit? |
||
v6ak Profil |
#7 · Zasláno: 12. 8. 2007, 09:51:29
Nicméně teď jsem to zkopíroval, nazval to index.php a vytvořil jsem adresáře tmp a soubory a funguje mi to (jen při nahrání ne-obrázku to píše Warning: Division by zero in ...index.php on line 25).
|
||
Časová prodleva: 17 let
|
0