Search code examples
phpfile-extension

How can I get a file's extension in PHP?


This is a question you can read everywhere on the web with various answers:

$ext = end(explode('.', $filename));
$ext = substr(strrchr($filename, '.'), 1);
$ext = substr($filename, strrpos($filename, '.') + 1);
$ext = preg_replace('/^.*\.([^.]+)$/D', '$1', $filename);

$exts = split("[/\\.]", $filename);
$n    = count($exts)-1;
$ext  = $exts[$n];

etc.

However, there is always "the best way".


Solution

  • People from other scripting languages always think theirs is better because they have a built-in function to do that and not PHP (I am looking at Pythonistas right now :-)).

    In fact, it does exist, but few people know it. Meet pathinfo():

    $ext = pathinfo($filename, PATHINFO_EXTENSION);
    

    This is built-in. pathinfo() can give you other information, such as canonical path, depending on the constant you pass to it.

    Remember that if you want to be able to deal with non-ASCII characters, you need to set the locale first. For example:

    setlocale(LC_ALL, 'en_US.UTF-8');
    

    Also, note this doesn't take into consideration the file content or MIME type, you only get the extension. But it's what you asked for.

    Lastly, note that this works only for a file path, not a URL resources path, which is covered using PARSE_URL.