Autor Zpráva
johanies
Profil *
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 *
podotýkám, že chmod mám nastavený na 0777
v6ak
Profil
<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
BTW: příště použijte tag pre:
váš 

kód
i
s

mezerami

johanies
Profil *
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
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
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).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0