63

I have an upload script that I need to check the file extension, then run separate functions based on that file extension. Does anybody know what code I should use?

if (FILE EXTENSION == ???)
{
FUNCTION1
}
else if
{
FUNCTION2
}
0

7 Answers 7

130

pathinfo is what you're looking for

PHP.net

$file_parts = pathinfo($filename);

switch($file_parts['extension'])
{
    case "jpg":
    break;

    case "exe":
    break;

    case "": // Handle file extension for files ending in '.'
    case NULL: // Handle no file extension
    break;
}
Sign up to request clarification or add additional context in comments.

3 Comments

What's the case for no extension? case NULL? case ""?
Updated. empty string "" is for files then end with .. NULL is for no file extension. You could break out the case statement, but for the example I just group them together.
pathinfo($pathtofile, PATHINFO_EXTENSION)
27
$info = pathinfo($pathtofile);
if ($info["extension"] == "jpg") { .... }

2 Comments

I've used this code on a section of my website. However, when executing it along with echo "$info" it always returns the value Array. Why is this?
@user2910074 This question is OLD, and I'll have you see your code in order to provide with any help. I suggest that you'll post a question here on SO
8
$file_parts = pathinfo($filename);

$file_parts['extension'];
$cool_extensions = Array('jpg','png');

if (in_array($file_parts['extension'], $cool_extensions)){
    FUNCTION1
} else {
    FUNCTION2
}

1 Comment

you might want to change the order of the 'needle' and the 'haystack' in in_array.
8

For php 5.3+ you can use the SplFileInfo() class

$spl = new SplFileInfo($filename); 
print_r($spl->getExtension()); //gives extension 

Also since you are checking extension for file uploads, I highly recommend using the mime type instead..

For php 5.3+ use the finfo class

$finfo = new finfo(FILEINFO_MIME);
print_r($finfo->buffer(file_get_contents($file name)); 

Comments

3
$path = 'image.jpg';
echo substr(strrchr($path, "."), 1); //jpg

Comments

1
  $original_str="this . is . to . find";
  echo "<br/> Position: ". $pos=strrpos($original_str, ".");
  $len=strlen($original_str);
  if($pos >= 0)
  {
    echo "<br/> Extension: ".   substr($original_str,$pos+1,$len-$pos) ;
   } 

1 Comment

@jurchiks this . is . to . find is absolutely a valid file name in most operating systems.
1
$file = $_FILES["file"] ["tmp_name"]; 
$check_ext = strtolower(pathinfo($file,PATHINFO_EXTENSION));
if ($check_ext == "fileext") {
    //code
}
else { 
    //code
}

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.