PHP kézikönyv
Előző
Következő
A PHP alkalmas fájl feltöltést fogadni bármilyen RFC-1867 kompatibilis böngészőtől (mint a Netscape Navigator 3 vagy későbbi és a Microsoft Internet Explorer 3 Microsoft javítással, vagy későbbi IE javítás nélkül).
Ez a szolgáltatás egyaránt lehetővé teszi a látogatónak szöveges és bináris fájlok feltöltését.
A PHP azonosítási és fájlkezelési képességeivel teljes felügyeletet lehet gyakorolni afelett, hogy ki tölthet fel állományokat, és azokkal mi történjen.
Kapcsolodó konfigurációs megjegyzés:
Lásd még: file_uploads, upload_max_filesize, upload_tmp_dir és post_max_size direktívákat a php.ini -ben!
Érdemes megemlíteni, hogy a PHP támogatja a PUT metódust is, amit a Netscape Composer és a W3C Amaya kliensek használnak.
Lásd a PUT metódusú feltöltések részt.
Az állomány feltöltési lehetőség egy különleges módon kialakított űrlappal biztosítható, amely nagyjából így néz ki:
Példa 18-1.
Állományfeltöltő űrlap
form enctype=" multipart / form-data "action="_URL_" method="post "input type="hidden" name="MAX_FILE_SIZE "value="1000" Állpmány elküldése: input name="userfile "type="file" input type="submit "value="OK" / form
Figyelem
A MAX_FILE_SIZE csak javasolt érték a böngészők számára.
Könnyű megkerülni ezt a megadott maximumot.
Ezért nem szabad csak arra építeni, hogy a böngésző úgy viselkedik, ahogy azt ebben a példában láttuk.
A maximális feltöltési állományméretre vonatkozó PHP beállítások azonban nem kerülhetőek meg.
A feltöltött állományokra vonatkozó változók PHP verziótól függően különböznek egymástól.
Az autoglobális $_FILES PHP 4.1.0 óta létezik, a $HTTP_POST_FILES tömb PHP 4.0.0 óta.
Ezek a tömbök tartalmazzák az összes feltöltött állomány adatait.
Az új verziókban már a $_FILES Az új verziókban már a $_FILES használata javasolt.
Ha a register_globals PHP diretíva be van kapcsolva, akkor a vonatkozó változók a globális névtérben is létrejönnek, és mint globális változók használhatók.
Figyelem:
A register_globals alapértelmezés szerint biztonsági okokból ki van kapcsolva, PHP 4.2.0 verziójától kezdve.
A $_FILES tartalma a fenti példánk alapján a következő.
Megjegyezzük, hogy az alábbi felsorolás arra épít, hogy a az állomány feltölő mező neve userfile, ahogy a fenti példában látható.
Az állomány eredeti neve a távoli kliensgépen.
A feltöltött állomány MIME típusa, ha a böngésző átadta ezt az információt, pl.: "image / gif".
A feltöltött állomány mérete bájtokban.
Annak az ideiglenes állománynak a neve, amely a szerveren tárolja a feltöltött állomány tartalmát.
Az állomány feltöltés során keletkezett hiba kódja.
Az error elem PHP 4.2.0-tól használható.
Megjegyzés:
A PHP 4.1.0 előtti verziókban $_FILES tömb helyett a $HTTP_POST_FILES -t kell használni, amely nem autoglobális változó, mint ahogy $_FILES.
A PHP 3 nem biztosítja a $HTTP_POST_FILES változót sem.
Ha register_globals is turned on in php.ini, additional variables are available.
Ha a register_globals be van kapcsolva a php.ini fájlban, akkor a következő változók jönnek létre.
A $userfile_name megegyezik a $_FILES[ 'userfile']['name'] elemével, $userfile_type a $_FILES['userfile']['type'] elemével, stb.
Vedd figyelembe, hogy PHP 4.2.0 verziójától kezdve a register_globals alapértelmezés szerint ki vankapcsolva.
Nem ajánlatos erre a direktívára hagyatkozni program írásakor.
Az állományok alapbeállításban a szerver szokásos ideiglenes könyvtárában tárolódnak, ha nem adtál meg mást az upload_tmp_dir beállítással a php.ini fájlban.
A szerver alapbeállítású könyvtára megváltoztatható a TMPDIR környezeti változóval abban a környezetben, ahol a PHP fut.
PHP szkriptből a putenv() -el való átállítás nem működik.
Ez a környezeti változó annak ellenőrzésére is használható, hogy más műveletek is végezhetőek-e a feltöltött állományokon.
Példa 18-2.
Fájlfeltöltések ellenőrzése
Az alábbi példák a PHP 4.0.2-nél újabb verzióival működnek.
Lásd az is_uploaded_file() és move_uploaded_file() függvényeket.
?php / / A PHP 4.1.0 előtti verzióiban a $_FILES helyett a $HTTP_POST_FILES használandó if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {copy($_FILES['userfile']['tmp_name'], "/ a/feltoltott / file / uj / helye");} else {echo "Lehetséges támadás.
Fájlnév: ". $HTTP_POST_FILES['userfile']['name'];} / * ...vagy... * / move_uploaded_file($_FILES['userfile']['tmp_name']," / a/feltoltott / file / uj / helye");?
A PHP programnak, amely megkapja a feltöltött állományt, gondoskodnia kell arról is, hogy a kívánt műveleteket elvégezze az állománnyal.
Például törölheti azt, ha az túl nagy, vagy túl kicsi, figyelembe véve a $_FILES[ 'userfile']['size'] változó értékét, vagy meghatározhatja a $_FILES['userfile']['type'] alapján, hogy ez a fájl megfelel-e egy meghatározott fájltípusnak, és ha nem, törölheti.
PHP 4.2.0-től kezdve a $_FILES[ 'userfile']['error'] használható arra, hogy a hibakódoknak PHP 4.2.0-től kezdve a $_FILES['userfile']['error'] használható arra, hogy a hibakódoknak megfelelően változzon szkript működését.
Bármi is legyen a cél a feltöltött állománnyal, a PHP szkriptnek kell gondoskodnia arról, hogy elmozgassa egy biztonságos helyre, vagy törölje az ideiglenes könyvtárból az adott ideiglenes állományt.
Az ideiglenes állomány törlésre kerül az ideiglenes könyvtárból a kérés végrehajtásának végeztével, ha nem lett elmozgatva vagy átnevezve.
Előző
Tartalom
Következő
Sütik (cookie-k)
Fel
Hibaüzenetek magyarázatai