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ügyeleted van afelett, hogy ki tölthet fel fájlt, és mi történik a feltöltött fájlokkal.
É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.
A fájl feltöltési lehetőség egy speciálisan kiképzett formmal biztosítható:
Figyelem |
A MAX_FILE_SIZE egy javasolt érték a böngészők számára. Könnyű megkerülni ezt a megadott maximumot. Ezért nem szabad arra építeni, hogy a böngésző úgy viselkedik, ahogy azt te szeretnéd. A PHP-beállítások a maximális feltöltési állományméretre azonban nem kerülhetőek meg. |
A változók, amelyek egy sikeres feltöltés során létrejönnek a PHP változat és beállítás függvényében mások-mások lehetnek. A következő változók a feltöltés célprogramjában jönnek létre egy sikeres feltöltés során. Ha a track_vars beállítást engedélyezed, a $HTTP_POST_FILES és $_FILES tömbök jönnek létre. Végül a kapcsolódó változók létrejöhetnek globális változókként is, ha a register_globals beállítás be van kapcsolva. Ez azonban nem javasolt.
Megjegyzés: A track_vars beállítás mindig be van kapcsolva a PHP 4.0.3 vagy újabb veziókban. A PHP 4.1.0 vagy újabb változatokban a $_FILES tömböt is használhatod a $HTTP_POST_FILES helyett. A $_FILES mindig elérhető, ezért nem szabad a global kulcsszót használni a $_FILES változóra függvényekben.
A $HTTP_POST_FILES és a $_FILES változók használata javasolt a feltöltött állomány információk elérésére. A tömb tartalma itt következik. Ebben az esetben feltételezzük, hogy a fenti űrlapnak megfelelően a 'userfile' nevet adtad a feltöltési input mezőnek:
Az eredeti fájlnév a kliensgépen.
A fájl MIME típusa, ha a böngésző megadta ezt az információt. Például egy gif kép esetében: "image/gif".
A feltöltött fájl mérete, byte-ban megadva.
Az ideiglenes fájl elérési útja, ahol a feltöltött fájl tárolásra került a szerveren.
Megjegyzés: A PHP 4.1.0 és újabb verziók a rövidebb nevű $_FILES változót is biztosítják. A PHP 3 nem biztosítja a $HTTP_POST_FILES változót.
Ha a register_globals be van kapcsolva a php.ini fájlban, a következő változók jönnek létre. Ebben az esetben is feltételezzük, hogy a fenti űrlapnak megfelelően a 'userfile' nevet adtad a feltöltési input mezőnek:
$userfile - Az ideiglenes fájl elérési útja, ahol a feltöltött fájl tárolásra került a szerveren.
$userfile_name - Az eredeti fájlnév a kliens gépen.
$userfile_size - A feltöltött fájl mérete, byte-okban megadva.
$userfile_type - A fájl MIME típusa, ha a böngésző megadta ezt az információt. Például egy gif kép esetében: "image/gif".
Megjegyzés: A register_globals = On beállítás nem ajánlott biztonsági és teljesítmény okok miatt.
A fájlok 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. Egy PHP szkriptből a putenv()-el való átállítása nem fog menni. Ez a környezeti változó arra is használható, hogy ellenőrizd, hogy más műveletek is végezhetőek-e a feltöltött fájlokon.
Példa 20-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.
|
A PHP program, ami megkapja a feltöltött fájlt, gondoskodik arról is, hogy a kívánt műveleteket elvégezze a fájlal. Például törölheti a fájlt, ha az túl nagy, vagy túl kicsi, figyelembe véve a $HTTP_POST_FILES['userfile']['size'] változót, vagy meghatározhatja a $HTTP_POST_FILES['userfile']['type'] alapján, hogy ez a fájl megfelel-e egy meghatározott fájltípusnak, és ha nem, törölheti. Bármi is a cél a feltöltött fájlal, 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 fájlt.
A fájl törlésre kerül az ideiglenes könyvtárból a kérés végrehajtásának végeztével, ha nem mozgatod el, vagy nem nevezed át.