PHP
downloads | documentation | faq | getting help | mailing lists | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

finfo_open> <finfo_close
Last updated: Fri, 01 Aug 2008

view this page in

finfo_file

(PECL fileinfo:0.1-1.0.4)

finfo_fileReturn information about a file

Descrierea

string finfo_file ( resource $finfo , string $file_name [, int $options [, resource $context ]] )
finfo
string file ( string $file_name [, int $options [, resource $context ]] )

This function is used to get information about a file.

Parametri

finfo

Fileinfo resource returned by finfo_open().

file_name

Name of a file to be checked.

options

One or disjunction of more Fileinfo constants.

context

For a description of contexts, refer to Stream Funcţii.

Valorile întroarse

Returns a textual description of the contents of the filename argument, or FALSE if an error occurred.

Exemple

Example #1 A finfo_file() example

<?php
$finfo 
finfo_open(FILEINFO_MIME); // return mime type ala mimetype extension
foreach (glob("*") as $filename) {
    echo 
finfo_file($finfo$filename) . "\n";
}
finfo_close($finfo);
?>

Exemplul de mai sus va afişa ceva similar cu:

text/html
image/gif
application/vnd.ms-excel

Vedeţi de asemenea



finfo_open> <finfo_close
Last updated: Fri, 01 Aug 2008
 
add a note add a note User Contributed Notes
finfo_file
darko at uvcms dot com
01-Aug-2008 05:28
OO (bit improved) version of the same thing

<?php
$file
= '<somefile>';
$ftype = 'application/octet-stream';
$finfo = @new finfo(FILEINFO_MIME);
$fres = @$finfo->file($file);
if (
is_string($fres) && !empty($fres)) {
  
$ftype = $fres;
}
?>
darko at uvcms dot com
24-Apr-2008 06:53
Another interresting feature of finfo_file on Windows.

This function can return empty string instead of FALSE for some file types (ppt for example). Therefore to be sure do a triple check of output result and provide default type just in case. Here is a sample code:

$ftype = 'application/octet-stream';
$finfo = @finfo_open(FILEINFO_MIME);
if ($finfo !== FALSE) {
   $fres = @finfo_file($finfo, $file);
   if ( ($fres !== FALSE)
        && is_string($fres)
        && (strlen($fres)>0)) {
            $ftype = $fres;
        }
   @finfo_close($finfo);
}
WebShowPro
25-Sep-2007 11:01
Just an improvement on the sample Ryan Day posted - slightly off topic since this method does not use finfo_file but in some cases this method might be preferable.

The main change is the -format %m parameters given to the identify call.  I would suggest using the full system path to identify i.e. /usr/bin/identify to be a little safer (the location may change from server to server though).

<?php

function is_jpg($fullpathtoimage){
    if(
file_exists($fullpathtoimage)){
       
exec("/usr/bin/identify -format %m $fullpathtoimage",$out);
       
//using system() echos STDOUT automatically
       
if(!empty($out)){
           
//identify returns an empty result to php
            //if the file is not an image
           
           
if($out == 'JPEG'){
                return
true;
            }
        }
    }
    return
false;
}

?>
spazdaq at hotmail dot com
22-Sep-2007 04:00
FYI

contrary to the documentation, finfo_file seems to be returning a semicolon delimited string that contains not just the mime type but also the character set.

so

$finfo = finfo_open(FILEINFO_MIME);
echo(finfo_file($finfo, $my_file));

returns: text/plain; charset=us-ascii

it may be dependent on the magic file, but i'm too lazy to investigate further.
Ryan Day
31-Aug-2007 11:34
to check images on unix based systems its much better to use the identify command provided by image magic as it provides accurate results about all files

<?php
function is_jpg($fullpathtoimage){
    if(
file_exists($fullpathtoimage)){
       
exec("identify $fullpathtoimage",$out);
       
//using system() echos STDOUT automatically
       
if(!empty($out)){
           
//identify returns an empty result to php
            //if the file is not an image
           
$info = $out[0];
           
$info = explode(' ',$out[0]);
           
//^IF THE FILENAME CONTAINS SPACES
            //^THIS WILL NOT WORK...be creative
           
$type = $info[1];
            if(
$type == 'JPEG'){
                return
true;
            }
        }
    }
    return
false;
}
?>

identify can process all types of images that are web friendly
sample output:
./image/someimage.jpg JPEG 150x112 150x112+0+0 DirectClass 8-bit 4.54688kb
if you dont want to control the image name or want to support spaces use: escapeshellarg()
http://us2.php.net/manual/en/function.escapeshellarg.php

function links:
exec() -- http://us2.php.net/manual/en/function.exec.php
explode() -- http://us2.php.net/manual/en/function.explode.php
Schraalhans Keukenmeester
22-May-2007 12:20
Tempting as it may seem to use finfo_file() to validate uploaded image files (Check whether a supposed imagefile really contains an image), the results cannot be trusted. It's not that hard to wrap harmful executable code in a file identified as a GIF for instance.

A better & safer option is to check the result of:

if (!$img = @imagecreatefromgif($uploadedfilename)) {
  trigger_error('Not a GIF image!',E_USER_WARNING);
  // do necessary stuff
}

finfo_open> <finfo_close
Last updated: Fri, 01 Aug 2008
 
 
show source | credits | sitemap | contact | advertising | mirror sites