Upload souborů na HTTP server
Rubrika: PHP
Následující dva skripty vám pomohou při řešení věčného problému uploadu souborů na stranu serveru. První z nich upload_form.php je formulář který slouží pro výběr souboru. Najdete vněm také skrytý parametr „MAX_FILE_SIZE“ který určuje maximální velikost přenášeného souboru. V našem případě jsme nastavili tento parametr zhruba 50k. Znamená to že se budou přenášet soubory pouze do velikosti max. 50k.
upload_form.php :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>www.provaz.cz/sector02 - Test Upload 01</title> </head> <body> <form enctype="multipart/form-data" action="upload.php" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="50000"> Vložit obrázek: <input name="userfile" type="file" > <input name="submit" type="submit" value="Send File"> </form> </body> </html>
Pokud přenášený soubor odpovídá zadané velikosti a pokud není transakce nějak přerušena, zadaný soubor se přenese do TMP adresáře, pod TMP-Názvem, na stranu serveru. Druhý skript upload.php vám přiblíží jak zjistit parametry předaného souboru. Poradí vám také jak zajistit přenos pouze určitého typu souboru. V našem příkladu jsme se zaměřili na přenos obrázku GIF.
upload.php :
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>www.provaz.cz/sector02 - Test Upload 02</title> </head> <body> <?php if (is_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'])) { //--- kontrola na typ souboru --- if ($HTTP_POST_FILES['userfile']['type']<>"image/gif") { echo "Nepodporovaný formát souboru:".$HTTP_POST_FILES['userfile']['type']; exit; } else { echo "Typ : OK<br>"; echo "Name: ".$HTTP_POST_FILES['userfile']['name']."<br> "; echo "TMPName: ".$HTTP_POST_FILES['userfile']['tmp_name']."<br> "; echo "Type: ".$HTTP_POST_FILES['userfile']['type']."<br> "; echo "Size: ".$HTTP_POST_FILES['userfile']['size']."<br> "; } if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'], $HTTP_POST_FILES['userfile']['name'])) { echo 'OK'; } else { echo "Error - Nemáte dostatečná přístupová práva"; } } else { echo "Soubor ".$HTTP_POST_FILES['userfile']['name']." je větší než 50kb"; } ?> </body> </html>
Výsledkem druhého skriptu je překopírování souboru z TMP adresáře na straně serveru do vašeho požadovaného cílového souboru. Nezapomeňte že je nutné mít v tomto adresáři nastavená příslušná práva! To je hlavní důvod proč nebude tento skript fungovat na některých freeware-serverech.
Oba skripty si můžete stáhnout na adrese http://www.provaz.cz/download_id.php?id=62
Datum vydání: 19.10.2003 | Zobrazeno: 57663
Permanentní odkaz: Upload souborů na HTTP server
Autor:provaz
Autor:ketez67
Autor:provaznik
Autor:ketez67
Autor:ketez67
Autor:ketez67
Ještě vyzkoušejte následující změnu ve volání move_uploaded_file. Změnte kód třeba následujícím způsobem …. if (move_uploaded_file($HTTP_POST_FILES['userfile']['tmp_name'],$path_to.$file_to)) …. Proměnnou $path_to nastavte na nějaký adresář kde nastavíte pomocí FTP klienta úplná práva (CHMOD 777) . a proměnnou $file_to nastavte třeba na původní hodnotu názvu souboru ($file_to = $HTTP_POST_FILES['userfile']['name']). Hlavní finta je v nastavení práv na ten adresář uvedený v proměnné $path_to.
Jinak příkaz umask jsem prozatím používal jen u vytváření adresářů a emám sním moc zkušeností. Použil bych jej přímo před funkcí move_uploaded_file. Jestli to dobře chápu, měl by příkaz umask() ovlivnit jeden následující příkaz.
Jinak řeknu Vám, takového správce serveru bych hned vyměnil, nebo alespoň řádně provětral :- ).
Autor:Provaznik
Autor:ketez67
$accept_file = array("image/gif","image/pjpeg");
if ($HTTP_POST_FILES['userfile']['type']!in_array($accept_file)) { ....
Pak už je všechno stejné
Autor:Provaznik
Autor:ketez67
Autor:ketez67