Uplaod

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.