PHP – kako ugotoviti tip datoteke (get file extension type)
Vsak od nas, ki se je vsaj malo ukvarjal z PHP-jem je moral pogledati kakšen tip datoteke je bil podan aplikaciji. Zato obstaja veliko načinov, poglejmo si nekaj najbolj uporabljenih (nekateri moji, nekateri pobrani z drugih spletnih strani):
#1 strrpos način
#2 uporaba pathinfo funkcije
#3 strrchr način
#4 explode in end način, ne prestane E_STRICT standarda (Only variables should be passed by reference)
#5 preg replace
Kot dodatno pa lahko za slike dobimo mime-type z pomočjo getimagesize funkcije:
Meni najbolj všečna metoda je zagotovo pathinfo s katero lahko dobimo tudi druge podatke. Več o tej funkciji si preberite na PHP strani. Najhitrejši med njimi pa je strrchr način. No vsaj tako pravijo, sam tega nisem preizkusil.
Zgoraj omenjeni načini pa imajo eno napako in sicer tip datoteke dobijo glede na ime datoteke. Torej, če uporabnik želi pretentati sistem mora le preimenovati datoteko (spremeniti končnico). To velja za vse funkcije razen getimagesize, ki se ne zanaša na ime datoteke ampak prebere prvih nekaj bytov in na podlagi teh podatkov skuša ugotoviti tip slike.
Delno lahko problem rešimo tako, da z dobljeno datoteko poskusimo kreirati PHP resource s pomočjo createimagefromjpeg (če je datoteka tipa jpeg), ki nam nato vrne false v primeru, da slika ni tipa JPEG, vendar to lahko naredimo le za določene tipe datotek (slike), pa še rešitev ni ravno perfektna.
Uporaba operacijskega sistema in uporaba exec funkcije:
Tip datoteke dobimo s pomočjo operacijskega sistema. Tukaj zna biti težava, ker včasih vrne čudno vrednost, recimo enkrat audio/x-ms-wma drugič application/octet-stream za isti tip datoteke (.wmv). Dodatno pa je problem exec funkcija, ki je pri nekaterih shared gostovanjih onemogočena.
Drugi način pa je uporaba fileinfo knjižnice. Sicer ni široko podprta na strežnikih vendar bo tudi ta težava kmalu odpravljena saj bo PHP6 že privzeto vključevala omenjeno knjižnico. Torej, če se ne želite zanašati na ime datoteke potem uporabite sledeči extension. Moram pa opozoriti, da zadeva ni 100%, vendar bo najverjetneje zadostovala vašim potrebam.
Dodatne informacije:
- exif_imagetype - še ena funkcija s katero lahko dobimo mime type slike
- image_type_to_mime_type - uporabno za pretvorbo med image type in mime type
- Nekaj PHP funkcij za branje mime type poljubne datoteke
Kako pa se vi borite proti zlorabi datotek, če sploh? Sporočite vaš najbolj priljubljen način in v primeru, da poznate kakšen uber postopek le na dan z njim.
Podobni članki:
- Shrani datoteko / Odpri datoteko dialog – download center (mime-type, Content-type, Content-Disposition)
- Spreminanje input type text v input type password – Javascript
- PHP – namestitev SQL Server 2005 knjižnice (SQLSRV extension)
- Preprosta skripta – kreiranje Excel datoteke iz PHP tabele/array
- PHP – Kreiranje PDF datoteke – DOMPDF – TCPDF
- AJAX iskanje datotek, dodajanje v seznam ter predogled le teh (PDF, jpeg)
- PHP – pošiljanje emaila – epošte – sending email – HTML Mime Mail
- Kako preveriti ali že obstaja določena MySQL tabela
- Predogled PDF-ja – pretvorba PDF v jpeg s pomočjo PHP-ja
- PHP – branje Excel (.xls) datoteke – Excel UTF8 branje



October 26th, 2008 ob 9:58 pm
Odvisno od tega, kateri tip datoteke je. Pri nekaterih tipih lahko preveriš MIME.
October 26th, 2008 ob 11:51 pm
Pirnat, malce več povej okrog tega, si zelo skopo tole povedal ... Za katere tipe datotek misliš, na kakšen način, je zanesljiv (se ne zanaša na ime datoteke ampak poskuša ugotoviti iz same vsebine datoteke, itd?).
October 27th, 2008 ob 12:12 pm
Še en način je fileinfo.
October 27th, 2008 ob 7:43 pm
gasper_k, ja sem ga tudi omenil, na koncu. Tnx anyway.
October 29th, 2008 ob 11:51 am
ah, sori, sem spregledal. Očitno cel odstavek :/ bom bolj pozoren drugič
October 29th, 2008 ob 3:34 pm
Ni pene:)