PHP Function To Get A File Extension From A String
Getting the file extension from a PHP string can be very important in validating a file or file upload. I've written a simple PHP function to retrieve a file extension from a string.
The Code
function get_file_extension($file_name) {
return substr(strrchr($file_name,'.'),1);
}
This simple method of file extension retrieval should be reused throughout your code.
Client-side APIs on mobile and desktop devices are quickly providing the same APIs. Of course our mobile devices got access to some of these APIs first, but those APIs are slowly making their way to the desktop. One of those APIs is the getUserMedia API...
CSS filter support recently landed within WebKit nightlies. CSS filters provide a method for modifying the rendering of a basic DOM element, image, or video. CSS filters allow for blurring, warping, and modifying the color intensity of elements. Let's have...
Once concept I'm very fond of is lazy loading. Lazy loading defers the loading of resources (usually images) until they are needed. Why load stuff you never need if you can prevent it, right? I've created LazyLoad, a customizable MooTools plugin that...
It's been quite a while since I've written a PHP grabber and the itch finally got to me. This time the victim is the International Movie Database, otherwise known as IMDB. IMDB has info on every movie ever made (or so it seems). Their...
This looks really useful, thanks.
Why reinvent the wheel? We have good ol’ pathinfo() :
http://hu2.php.net/manual/en/function.pathinfo.php
Array
(
[dirname] => .
[basename] => some.file.extension
[extension] => extension
[filename] => some.file
)
I came up with this snippet to get the file extension as well, using array functions:
… and it got cut out. Here’s the function, without tags:
As mentioned by ochronus the following code does the exact same thing:
or we can do it via
end(explode('.', "filename.ext"));
easilyFile extension from path:
Try & enjoy!
What happens when you try to get the extension of “/etc/init.d/README” with the explode method?
Just use the pathinfo().
Oh come on…i wrote this post quickly.
lol. Why?!
Just use the pathinfo()!!!!!!
Do you re-write every function that’s in PHP, including stuff like mktime() ????????
IT’S RIDICULOUS!
I don’t like rhetoric. You asked why? Could be many reasons. You just need some imagination.
– Didn’t know about pathinfo (could be many reasons for this. New to PHP, came frmo a different language, simply has a knowledge gap)
– Did not know what pathinfo could do (it’s not well documented)
– Wrote the routine just for fun to improve programming skills (not used in actual project)
@Jorge: Either way works, and it just ends up being a matter of preference. You have to consider how this function will usually be used on a web application; it will be grabbing the extension and making sure it’s an allowed extension for upload. Thus, the explode method would return something that doesn’t match a valid extension (like your README example), and the file upload would get declined.
If you’re building a file explorer on the web, sure, use pathinfo(); that’s common sense. If you’re building a web app that takes uploads, then I can’t imagine the explode method would not be faster than pathinfo.
Thanks for sharing !
@crivion: please explain it with example
I’ve run a bunch of microtime() tests, and almost every time pathinfo() is the fastest, by a healthy margin over end/explode. substr/strrchr seems to vary somewhere in the middle.
There are many way to get file extension. For me, I use
end(explode('.', $_FILES['fileupload']['name']));
I think this is easy to understand code from it.
// gif image uploaded
if (isset($_FILES[‘file’])) {
$file_extension =$_FILES[‘file’][‘extension’] ;
$extension = substr(“$file_extension”, 6); // remove the image/ and the gif extension remains.
echo $extension // return gif
}
Thanks , IT is really very user full.
I always prefer php code functions eg.
$file_extension=pathinfo($filename, PATHINFO_EXTENSION);
I found this post from Google, and though “wow, what a simple answer.” I then read the comments suggesting alternative methods and gave those a try as well. They all work of course, but I wanted to know what worked *better*, so I benchmarked them. The following is how long it took my server to run each method 1 million times on the string: ‘/var/www/thisisatest.1.2.18.min.js’
Substr: 0.8037 seconds
Pathinfo: 1.95027 seconds
Explode: 2.35024 seconds
Clearly, the method you posted smoked the competition. I will be using it. Thank you for posting this!
if your doin comparison checks on file ext try
return strtolower(substr(strrchr($file_name,’.’),1));
While
end(explode(‘.’,$file_name));
is indeed immediately intuitive to even an newbie, you could really help a programmer take a step forward by introducing him/her to the more usefulpathinfo($path, $options);
In addition
pathinfo
does what it says, so is automatically the winner of the Best Practice award.This comes from an advanced php’er who has never used the function until I seen it mentioned here. So thanks to David and all of you for your cross-examination
All the folks complaining about not using pathinfo()….There are times you do not want to use pathinfo(). For instance, when listing filenames on Amazon S3 without going to the trouble of downloading the file onto your server. You don’t have the actual file, so you may just want to parse the string…
Pathinfo accepts strings as a variable,
so your point is invalid.
You ALWAYS should use existing PHP function whenever possible.
Just like in the HTML – if you create a table: use table element, don’t make up one from divs.
@Sky A sincere thanks for the info, but the mini-lecture was not necessary. I’m quite aware that in normal cases the wheel should not be invented. I’m a software engineer who simply comes from a C++ and Objective-C background and don’t know PHP well. PHP is a rather badly designed and unpredictable language, the man page on pathinfo is of no great help.
Sky: A sincere thanks for the info, but the following lecture was not necessary. I’m quite aware that in normal cases the wheel should not be invented. I’m a software engineer who simply comes from a C++ and Objective-C background and doesn’t know PHP well. IMHO PHP is a rather badly designed and unpredictable language, and the man page on pathinfo is rather poor. Paths are PHP are *necessarily* strings with no level of abstraction over it. The manual should have documented whether it requires an actual path or not.
What if you are handling a url and its possible that we have a http://imgur.com/blablabla.jpg?x=15
Pretty much would never happen but good code will deal with odd data.
all methods fail if path has query or hash:
$filename = “mypic.gif?see=me#now”;
Yay, pathinfo() Do The Best :D
Look Code This , This Code Part Of Symfony Dependency Injection Loader
This is faster based on http://www.cowburn.info/2008/01/13/get-file-extension-comparison/
Thanks. useful
What would I do to remove the .php or .html extension from a string created from a file name? I’m having trouble finding code examples for doing this.