PHP Function To Get A File Extension From A String

By on  

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.

Track.js Error Reporting

Recent Features

  • Introducing MooTools Templated

    One major problem with creating UI components with the MooTools JavaScript framework is that there isn't a great way of allowing customization of template and ease of node creation. As of today, there are two ways of creating: new Element Madness The first way to create UI-driven...

  • Write Simple, Elegant and Maintainable Media Queries with Sass

    I spent a few months experimenting with different approaches for writing simple, elegant and maintainable media queries with Sass. Each solution had something that I really liked, but I couldn't find one that covered everything I needed to do, so I ventured into creating my...

Incredible Demos

  • Sexy Album Art with MooTools or jQuery

    The way that album information displays is usually insanely boring. Music is supposed to be fun and moving, right? Luckily MooTools and jQuery allow us to communicate that creativity on the web. The XHTML A few structure DIVs and the album information. The CSS The CSS...

  • iPad Detection Using JavaScript or PHP

    The hottest device out there right now seems to be the iPad. iPad this, iPad that, iPod your mom. I'm underwhelmed with the device but that doesn't mean I shouldn't try to account for such devices on the websites I create. In Apple's...


  1. This looks really useful, thanks.

  2. Why reinvent the wheel? We have good ol’ pathinfo() :

    [dirname] => .
    [basename] => some.file.extension
    [extension] => extension
    [filename] => some.file

  3. I came up with this snippet to get the file extension as well, using array functions:

  4. … and it got cut out. Here’s the function, without tags:

    function get_file_extension($file_name) {
       return end(explode('.',$file_name));
  5. As mentioned by ochronus the following code does the exact same thing:

    $file = '/tmp/test.php'; 
    echo pathinfo($file, PATHINFO_EXTENSION);
  6. or we can do it via end(explode('.', "filename.ext")); easily

  7. Rafieldex

    File extension from path:

    function f_extension($fn){
    return $ext;
    $extesnion=f_extension("files/file.jpg"); // returns jpg

    Try & enjoy!

  8. Jorge

    What happens when you try to get the extension of “/etc/init.d/README” with the explode method?

    Just use the pathinfo().

    • rafieldex

      Oh come on…i wrote this post quickly.

      function f_extension($fn){
        if (strpos($str[($len-1)],'.') === False) return False; // Has not .
      return $ext;
    • Sky

      lol. Why?!
      Just use the pathinfo()!!!!!!

      Do you re-write every function that’s in PHP, including stuff like mktime() ????????

    • jack

      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)

  9. @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.

  10. Thanks for sharing !

  11. sumit

    @crivion: please explain it with example

  12. DaveDisaster

    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.

  13. 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.

  14. // 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

  15. sudhir

    Thanks , IT is really very user full.

  16. I always prefer php code functions eg.

    $file_extension=pathinfo($filename, PATHINFO_EXTENSION);

  17. 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!

  18. jay

    if your doin comparison checks on file ext try

    return strtolower(substr(strrchr($file_name,’.’),1));

  19. 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 useful pathinfo($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

  20. jack

    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…

    • Sky

      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.

  21. jack

    @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.

  22. jack

    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.

  23. 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.

  24. LeePro

    all methods fail if path has query or hash:
    $filename = “mypic.gif?see=me#now”;

  25. Yay, pathinfo() Do The Best :D

  26. Look Code This , This Code Part Of Symfony Dependency Injection Loader

    public function supports($resource, $type = null) {
       return is_string($resource) && 'php' === pathinfo($resource, PATHINFO_EXTENSION);
  27. Tayo
    $filename = 'mypic.gif';
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    This is faster based on http://www.cowburn.info/2008/01/13/get-file-extension-comparison/

  28. Thanks. useful

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!

Recently on David Walsh Blog

  • Loading Static Templates for Intern Testing

    I use Intern by SitePen for all of my JavaScript functional testing.  Intern has loads of features other functional test frameworks don't and it's completely Promise-based -- something I got very used to when I used the Dojo Toolkit every day. Async test creation can...

  • Convert Video to mp3

    Let's all be honest for a moment:  we've all ... not paid for ... music.  Whether it was via a file sharing app like Kazaa or Napster, or it was downloading and seeding on bittorrent, or maybe even downloading a music video and ripping its audio,...

  • Sort git Branches by Date

    I'll be first person to admit I don't do as much git repository maintenance as I should.  I rarely delete branches which have been merged, so a git branch execution shows me a mile-long list of branches that likely aren't relevant.  The best way to find branches I've recently...

  • Best Tools and Resources for Web Professionals in 2015

    Looking for the right resources to help you satisfy the needs of your clients? On the lookout for the best tools to help you increase your revenue? Searching for the right software to help you improve your business? Well, then you’ve come to the right place....

  • JavaScript Polling

    Polling with JavaScript is one of those ugly but important functions within advanced front-end user experience and testing practices.  Sometimes there isn't the event you can hook into to signify that a given task is complete, so you need to get your hands dirty and simply poll for...