Upload souboru a register_globals = Off

Brecer,
mam formular, kterym si uzivatel muze uploadnout ikonu. Kdyz mam register_globals = On, je vse v pohode. Vypnu-li ale tuto direktivu je promenna $_POST['ikona']; prazdna. Vlastne je prazdna ikdyz mam register_globals = On.

Formular:
<form action="_muj_profil.php" method="post" enctype="multipart/form-data">
Ikona (soubor typu JPEG, rozměr 40 x 45 px):
<input type="file" size="44" name="ikona" accept="image/jpeg" />
<button type="submit">Upload</button>
</form>

_muj_profil.php:
<?
if (Is_Uploaded_File($ikona)):
$kam = "D:/Program Files/www/".$_SESSION['auth_id'].".jpg";
if (!Move_Uploaded_File ($ikona, $kam)):
die ("Nepodařilo se uploadovat ikonu (Chyba: _muj_profil.php-2)");
endif;
endif;
?>

Vkladam to podruhe, protoze jsem to nedopatrenim vlozil jinam
Neměla být cesta spíše od servru? tak to bude fungovat jen u tebe doma..


Jinak soubor není v proměnné post, ale $_FILES, a je to dvourozměrné pole

co na to říká manual:


$HTTP_POST_FILES/$_FILES obsahuje informace o uploadovaném souboru.

Obsah $HTTP_POST_FILES je takovýto (uvědomte si, že se předpokládá použití názvu uploadovaného souboru 'userfile' tak, jako v příkladu výše):


$HTTP_POST_FILES['userfile']['name']
Originální název souboru na klientském počítači.

$HTTP_POST_FILES['userfile']['type']
MIME typ souboru, pokud prohlížeč tuto informaci poskytuje (např. "image/gif").

$HTTP_POST_FILES['userfile']['size']
Velikost uploadovaného souboru v bytech.

$HTTP_POST_FILES['userfile']['tmp_name']
Dočasný název souboru, pod nímž byl uploadovaný soubor uložen na server.


Poznámka: PHP 4.1.0 a pozdější podporují zkrácený název proměnné $_FILES. PHP 3 nepodporuje $HTTP_POST_FILES.
Jj, diky ... odpoledne se mi to taky podarilo konzultovat s manualem ... Jasne, ze to bude jen doma, testuju ... jinak tam samozrejme bude cesta k adresari na serveru ...

Jinak, jeste k tomu mam dotaz, udelal jsem to takhle
<?
if (Is_Uploaded_File($_FILES['ikona']['tmp_name'])):
if ($_FILES['ikona']['type'] == "image/jpeg"):
if ($_FILES['ikona']['size'] <= $GLOBALS['velikost_ikony'] * 1024):
$kam = "D:/ikony/".$_SESSION['auth_id'].".jpg";
if (!Move_Uploaded_File ($_FILES['ikona']['tmp_name'], $kam)):
die ("Nepodařilo se uploadovat ikonu (Chyba: _muj_profil.php-2)");
endif;
else:
$velikost_kb = Round (BCDiv ($_FILES['ikona']['size'], 1024, 2));
die ("Nepodařilo se uploadovat ikonu, zabírá moc místa (".$velikost_kb." kB)");
endif;
endif;
endif;
?>

Ani trochu to nechapu, ale kdyz to zkousim v FF, tak se soubor vytvori, popr. prepise. Jenze v IE se nedeje nic ... Maximalni velikost ikony je nastavena na 10 kB, jenze IE ani nezahlasi, ze je ta ikona vetsi ... proste to projede a presmeruje ... ani nehodi zadnou chybu
No.. PHP je jedno, jestli ho pouštíš v IE nabo FF....

Možná bych dal spíše :

Move_Uploaded_File ($ikona, $kam)
ale to by mělo být jedno..

Jestli máš máš nastavený form na enctype="multipart/form-data"

a pak kde bereš tu
$GLOBALS['velikost_ikony']

Ale typoval bych, že ti chybí ten parametr formu...
Cely zpracovani je takhle, ty $GLOBALS[] sou nastaveny v config.php
<?
Session_Start ();
include_once ("../inc/config.php");

// Predani promennych
$email = $_POST['email']; // Mail pro potvrzení registrace
$jmeno = $_POST['jmeno']; // Jmeno
$prijmeni = $_POST['prijmeni']; // Prijmeni
$vek = $_POST['vek']; // Vek
$telefon = $_POST['telefon']; // Telefon
$icq = $_POST['icq']; // ICQ
$pohlavi = $_POST['pohlavi']; // Pohlavi
$zverejnit = $_POST['zverejnit']; // Zverejnovat udaje?

$status = true; // Kontrolni promenna

do {
Db_conn ();

$sql_update_nick= "UPDATE registrace SET
email = '".$email."', jmeno = '".$jmeno."', prijmeni = '".$prijmeni."',
vek = '".$vek."', telefon = '".$telefon."', icq = '".$icq."',
pohlavi = '".$pohlavi."', zverejnit = '".$zverejnit."'
WHERE nick = '".$_SESSION['auth_nick']."'";

$edituj_profil = MySQL_Query ($sql_update_nick);
if (!$edituj_profil):
die ("Dotaz selhal. Omluvte potíže (Chyba: _muj_profil.php-1)");
endif;

if (Is_Uploaded_File($_FILES['ikona']['tmp_name'])):
if ($_FILES['ikona']['type'] == "image/jpeg"):
if ($_FILES['ikona']['size'] <= $GLOBALS['velikost_ikony'] * 1024):
$kam = "D:/Program Files/www/ikony/".$_SESSION['auth_id'].".jpg";
if (!Move_Uploaded_File ($_FILES['ikona']['tmp_name'], $kam)):
die ("Nepodařilo se uploadovat ikonu (Chyba: _muj_profil.php-2)");
endif;
else:
$velikost_kb = Round (BCDiv ($_FILES['ikona']['size'], 1024, 2));
die ("Nepodařilo se uploadovat ikonu, zabírá moc místa (".$velikost_kb." kB)");
endif;
endif;
endif;

} while (false);

// Presmerovani na muj_profil.php s informaci
Header ("Location: ".$GLOBALS['url_root']."profil/muj_profil.php");
?>

Formular je takhle
<form action="_muj_profil.php" method="post" inctype="multipart/form-data">
<input type="file" size="44" name="ikona" accept="image/jpeg" />
<button type="submit">Upravit profil</button>
</form>

Je mi jasny, ze by to PHP melo a je jedno ... jen to proste nechapu
Máš tam inctype místo enctype :D
Zase jen blbej preklep tady pri kopirovani a upravach ... :/ Kdyby tam byl, tak by to prece neslo ani v FF
Tak uz jsem to vyresil ... IE vraci mime jako image/pjpeg a ne image/jpeg ... V tom to tedy bylo ... :)