Når man skal bruge filendelsen for en fil, findes der mange gode og brugbare metoder - men hvorfor ikke bare bruge PHPs egen funktion?
I dag da jeg sad og surfede en gammel nyhedsgruppe faldt jeg over følgende funktion fra about.com:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | function findexts ($filename) |
| 03 | { |
| 04 | $filename = strtolower($filename) ; |
| 05 | $exts = split("[/\.]", $filename) ; |
| 06 | $n = count($exts)-1; |
| 07 | $exts = $exts[$n]; |
| 08 | return $exts; |
| 09 | } |
| 10 | ?> |
Denne funktion var rent faktisk blevet anbefalet af flere, hvilket undrede mig - det er omtrent den største omvej, til at få fat på filendelsen, jeg nogen siden har set. Af ren nysgerrighed måtte jeg så se hvad folk ellers anbefalede rundt omkring, og her er et par af de metoder der synes at være populære:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | $fil = 'minfil.txt'; |
| 03 | //unødig omdannelse til array og flytning af internal pointer |
| 04 | $endelse = end(explode('.', $fil)); |
| 05 | echo $endelse.'<br>'; |
| 06 | //overkill - preg_replace er ikke til så simple opgaver! |
| 07 | $endelse = preg_replace('/^.*\.([^.]+)$/D', '$1', $fil); |
| 08 | echo $endelse.'<br>'; |
| 09 | //mest fornuftige alternativ |
| 10 | $endelse = substr(strrchr($fil, '.'), 1); |
| 11 | echo $endelse.'<br>'; |
| 12 | //heller ikke så ringe |
| 13 | $endelse = substr($fil, strrpos($fil, '.') + 1); |
| 14 | echo $endelse.'<br>'; |
| 15 | ?> |
strrchr() metoden ser rent faktisk ganske fornuftig ud, men specielt preg_replace() metoden virker som totalt overkill, og spild af kræfter for PHP.
pathinfo - den rette løsning
PHP har utroligt mange funktioner indbygget, og det er da også tilfælde når vi vil ha fat i filendelsen. pathinfo() returnerer information om en fil som et array, herunder sti, filnavn og filendelse. Hvis vi angiver at vi ønsker filendelsen, får vi denne direkte som en streng uden at skulle tilgå et array efterfølgende:
| Kopier til udklipsholder | Vis uden linie # | |
|---|---|
| 01 | <?php |
| 02 | //pathinfo fuld info i array |
| 03 | $fil_info = pathinfo($fil); |
| 04 | print_r($fil_info); |
| 05 | //pathinfo - kun filendelse |
| 06 | $endelse = pathinfo($fil, PATHINFO_EXTENSION); |
| 07 | echo $endelse.'<br>'; |
| 08 | ?> |
I mit daglige arbejde, ser jeg ofte funktioner, der er lavet til at gøre præcis det samme, som en indbygget funktion i PHP, men denne filendelse funktion fra about.com, er noget af det værste jeg længe har set - langsom, klodset og unødvendig. Brug altid PHPs egne funktioner hvis de findes!
NB: Husk nu at bare fordi en fil ender på fx .txt, så betyder det ikke at det er en tekst fil - brug aldrig pathinfo til validering af filtype!
kommentarer
Mon ikke de fleste har prøvet at finde en løgning på et problem - for efterfølgende at finde ud af, at det kunne have været læst meget nemmere.
skriv kommentar
Felter markeret med gult og * er påkrævet
Pingbacks
Hvis du linker til en af mine blog artikler fra et blogsystem der udsender pings vil du få et gratis do-follow link fra mig, du kna også twitte om en post og få et link til din twitter profil (Jeg forbeholder mig dog retten til at slette eller nofollow spam :P)











