Uplaod
20 příspěvků
Archiv diskusního fóra
Fórum je uzavřené a slouží pouze ke čtení. Některé informace mohou být zastaralé.
-
Zdravím, mám malý upload script podle intervalu, ale funkce se neprovede... Na ftp mám nastavené zapisování pro všechny... Kde mám prosím vás chybu? $obrazek = $_POST["obrazek"]; $sid = $_SESSION['id']; $cesta="/upload/avatars/".$sid.".png"; $kopirovani=move_uploaded_file($obrazek, $cesta); if(!$kopirovani) { echo("Omlouváme se, ale požadavek na nahrání avataru nebyl proveden.\nProsím akci opakujte. \nPokud stále nejde avatar nahrát, kontaktujte prosím admina - meelkor11@yahoo.com. Děkuji."); exit; } // Děkuji.
-
$cesta="/upload/avatars/ Pochybuji, že máš přístup do kořenového adresáře.
-
aneb vypiš si __FILE__ nebo něco takového, ať máš tušení, "kde jsi"
-
Tak pokud jsem to pochopil, tak jsem smazal to prevní lomítko, ale stále stejný problém. Děkuji.
-
Tak jsem to ještě tedy změnil na: $cesta="/3w/euweb.cz/3/3zone/upload/avatars/"
-
Co je obsahem proměnné $_POST['obrazek']? $obrazek podle toho, co tam máš, musí obsahovat výchozí cestu na skutečný soubor. Jelikož to jde z uživatele, tak pochybuji o pravosti proměnne. Získání souboru z formuláře by mělo být něco jako $obrazek = $_FILES["obrazek"]["tmp_name"];
-
Ach, děkuji. $obrazek byl prázdný. No, nevím jestli v tom co jste napsal se mělo ještě něco měnit, ale přepsal jsem dosavadní určení $obrazek tím co jste sem napsal a nyní $obrazek ma hodnotu: /tmp/phpKa0Y2L Potvrdí mi to že obrázek se uploadnul, ale neuploadnul. Děkuji mnohokrát.
-
Funkce move_uploaded_file($odkud, $kam) má dvě parametry. Výchozí a cílovou cestu. Jednoduše odkud kam má soubor nahrát. Výchozí cestu jsme vyřešili. Popravdě nic jiného než $_FILES tam vlastně není. Takže je potřeba vyřešit cílovou cestu. Cílová cesta musí odkazovat na skutečné místo. V relativním zápisu se to musí brát z pohledu umístění tohoto PHP skriptu (pokud není includován). Z toho zápisu (bez počátečního lomítka) je to od skriptu uvnitř adresáře upload/avatars. Součásti cesty druhého parametru je i název souboru. Z pohledu na skript by se tedy uploadovaný soubor měl nacházet na výše uvedeném adresáři pojmenovaný jako {id}.png ({id} by mělo být asi číslo IDčka). Pokud tomu tak není, tak je potřeba zkontrolovat cestu a název souboru. Zkontrolovat co vyhazuje $cesta. Popravdě se mi nelíbí generování názvu souboru, protože může selhat. Kdyby něco, tak původní název souboru lze získat jako $_FILES['obrazek']['name'].
-
Tedy, mám trochu pomalé vedení, ale: $cesta = upload/avatars/1.png //(tak jak má být) A název souboru je takový jaký má být... Ale stále mi příjde divná ta proměnná $obrazek ($odkud)... Přesně teď nevím, co jste tím celým mylel. :-) Děkuji vám za váš čas... (Mimochodem, co znamená to ["tmp_name"]? Děkuji.)
-
Proces uploadu probíhá následovně. 1) Uživatel zvolí přes formulář soubor a odešle to. 2) Server data příjme a předá PHP 3) PHP zjistí, že se posílá i obrázek, tak ten obrázek vytáhne a uloží na dočasné místo (/tmp/phpKa0Y2L). 4) Pomocí PHP funkce move_uploaded_file() tento dočasně uložený obrázek vezme a umístí tam, kam chce uživatel. $_FILES['promenna']['tmp_name'] = obsahuje umístění toho dočasného souboru $_FILES['promenna']['name'] = obsahuje originální jméno souboru. Tedy jméno, které má uživatel na disku a použil v formuláři.
-
No já jsem zase nepochopil větu: >> Potvrdí mi to že obrázek se uploadnul, ale neuploadnul.
-
No mám tam podmínku: if(!$kopirovani) A podle ní kopírování probéhne.
-
Asi bude nejlepší, když si problematiku nahrávání souboru nastuduješ a až pak budeš mít KONKRÉTNÍ problém, zeptáš se. http://www.hawwwran.com/index.php?str=php&priklad=upload
-
Dobře děkuji, podívám se na to. Ale myslím že konkrétní problém už mám. :-)
-
A nahradil jsi už proměnnou $_POST["obrazek"] za $_FILES['obrazek']['tmp_name'] ?
-
Ano.
-
Jestli chceš pořádně poradit, hoď sem znovu tvůj aktuální kód.
-
$obrazek = $_FILES["obrazek"]["tmp_name"]; if(isset($obrazek)) { $sid = $_SESSION['id']; $metriky_obr=GetImageSize($obrazek); if ($obrazek_size>15000) { echo("Obrázek je příliš velký! Proveďte prosím větší kompresi. Maximum je 15 KB (15000 Bytů)."); exit; } if(($metriky_obr[0] or $metriky_obr[1])>100) { echo("Odeslali jste obrázek příliš velkých rozměrů. Maximum výšky a šířky je 100px."); exit; } $cesta="upload/avatars/".$_SESSION['id'].".png"; $kopirovani=move_uploaded_file($obrazek, $cesta); if(!$kopirovani) { echo("Omlouváme se, ale požadavek na nahrání avataru nebyl proveden.\nProsím akci opakujte. \nPokud stále nejde avatar nahrát, kontaktujte prosím admina - meelkor11@yahoo.com. Děkuji."); exit; } else { $sql = "update users set avatar = '$cesta' WHERE `id` = ".$sid.";"; if(MySQL_Query($sql, $spojeni)) echo "<p><H3>Upraveno</H3></p>".$cesta."<br>".$_FILES['obrazek']['name']; else echo "Nastala chyba při vkládání infa do databáze..."; } } else echo "Nevyplnil jste cestu k obrázku.";
-
Ehm, tak se omlouvám ale funguje to, chyba byla v FTP manageru. :-) Děkuji mnohokrát.
-
Máš tam plno chyb: > $metriky_obr=GetImageSize($obrazek); > if ($obrazek_size>15000) { Kde máš definovánu proměnnou $obrazek_size? > if(($metriky_obr[0] or $metriky_obr[1])>100) { Proměnná $metriky_obr[0] není typu boolean.