Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to get a file extension without knowing it?

I have a file called 94bf663a100e848fb599209af8cdc2b5.wmv. I know pathinfo will not give me the extension if I just use the name 94bf663a100e848fb599209af8cdc2b5. I believe glob is only for checking if a file exists. So is it possible to get a file extension just knowing the file name (94bf663a100e848fb599209af8cdc2b5)?

like image 946
Scarface Avatar asked Jul 07 '11 17:07

Scarface


2 Answers

As the example on the php glob manual page suggests, glob does not simply check if the file exists, it returns every file that matches the expression.

Here's a modification of the example on that page for your needs:

$name = "94bf663a100e848fb599209af8cdc2b5";
$matching = glob($name . ".*");

$info = pathinfo($matching[0]);
$ext = $info['extension'];

This assumes there is one (and only one) file with that name (with any extension), but you should be able to modify it if the file might not exist, or there might be multiple files with the same name, and different extensions.

like image 84
rockerest Avatar answered Oct 20 '22 17:10

rockerest


The finfo_file() function will inspect the byte signature of a file to return its mimetype. From there, you can mostly deduce the correct file extension.

// Adapted from the PHP docs
$finfo = finfo_open(FILEINFO_MIME_TYPE); // return mime type ala mimetype extension
echo finfo_file($finfo, $filename);
finfo_close($finfo);
like image 40
Michael Berkowski Avatar answered Oct 20 '22 15:10

Michael Berkowski