用户评论:
[#1]
Anonymous [2013-07-04 19:41:50]
For most common image files:
if ($fh) {$bytes6=fread($fh,6);fclose($fh);
if ($bytes6===false) returnfalse;
if (substr($bytes6,0,3)=="\xff\xd8\xff") return'image/jpeg';
if ($bytes6=="\x89PNG\x0d\x0a") return'image/png';
if ($bytes6=="GIF87a"||$bytes6=="GIF89a") return'image/gif';
return'application/octet-stream';
}
returnfalse;
}?>
[#2]
illusivefingers at gmail dot com [2012-02-06 00:53:36]
I am running Windows 7 with Apache. It took hours to figure out why it was not working.
First, enable the php_fileinfo.dll extension in you php.ini. You'll also need the four magic files that are found in the following library:
http://sourceforge.net/projects/gnuwin32/files/file/4.23/file-4.23-bin.zip/download
An environment variable or a direct path to the file named "magic" is necessary, without any extension.
Then, make sure that xdebug is either turned off or set the ini error_reporting to not display notices or warnings for the script.
Hope this saves someone a few hours of frustration!
[#3]
olivier dot berger at it-sudparis dot eu [2011-03-09 12:02:24]
On my Debian squeeze system, the path needed is like :
$finfo= newfinfo(FILEINFO_MIME,"/usr/share/misc/magic.mgc");?>
[#4]
franssen dot roland at gmail dot com [2010-05-11 00:23:30]
Notice FileInfo::__construct() has strange behavior in PHP
$fileInfo= newfinfo(FILEINFO_MIME,null);?>
Expected result:
----------------
object(finfo)#2 (0) { }
Actual result:
--------------
Warning: finfo::finfo(): Failed to load magic database at ''. in *** on line ***
object(finfo)#2 (0) { }
See http://bugs.php.net/bug.php?id=51732
[#5]
mark at dynom dot nl [2008-11-09 12:34:08]
It seems there is quite some inconsistency in distributions and loading of magic files.
On Archlinux, the file is located here:
/usr/share/misc/file/magic.mgc
But this:
$fi= newfinfo(FILEINFO_MIME,'/usr/share/misc/file/magic');$fi->file('/tmp/fubar.txt');?>
Actually segfaults, where if I type the full name (including the file extension:)
$fi= newfinfo(FILEINFO_MIME,'/usr/share/misc/file/magic.mgc');// added ".mgc"$fi->file('/tmp/fubar.txt');?>
It works as expected, so I guess something goes wrong with "A .mime and/or .mgc suffix is added if needed."
[#6]
php at brudaswen dot de [2008-09-15 03:13:53]
Since it costed me some time to find the needed magic database files for Windows, just a hint:
The last release of the GnuWin32 project with both needed files (magic and magic.mime) currently was "file-4.23".
All releases after 4.23 to 4.25-1 did not contain both needed files.
Hope that helps.
[#7]
dario dot borreguero at gmail dot com [2008-04-16 03:15:42]
Platform: WinXP-SP2, PHP5.2.5, MySQL 5.0, Apache 2.2.8
After reading former notes, I wasn't able to load my magic database: 'magic.mime' file (donwloaded from GnuWin32 project, zipped with the binary files v4.21). I always got an invalid $finfo object or finfo_open(...) returned FALSE.
In order to be able to load the 'magic.mime' file, Fileinfo library (bundled in PHP5.2.5) also requires 'magic' file.
For example:
1. Database:
c:\php\magic.mime
c:\php\magic
2. PHP Code:
$filname='c:\php\php.ini';$finfo= newfinfo(FILEINFO_MIME,'c:\php\magic');
if (!$finfo) returnfalse;
echo$finfo->file($filename);?>
For further info see: http://pecl.php.net/bugs/bug.php?id=7555
Pay attention to comments added by 'christophe dot charron dot xul at gmail dot com'
NOTE: Before upgrading to PHP5.2.5, I was working with PHP5.2.1 and it only required 'magic.mime' file.
[#8]
php at kingsquare dot nl [2008-01-23 07:41:40]
The current version (1.04) doesnt support a different mime.magic database than the server default.
(the documentation is thus not correct)
Ubuntu default location is '/usr/share/file/magic'. In order for the examples to work all finfo_open()-commands must be issued with the extra location accordingly:
$file="/path/to/file.jpg";$handle=finfo_open(FILEINFO_MIME,'/usr/share/file/magic');$mime_type=finfo_file($handle,$file);?>
[#9]
ian at createanet dot co dot uk [2007-11-02 08:50:55]
Couldn't get finfo to return the mimetype in the way expected so i made a function to do it with system()
if (is_array($output) ) {$output=$output[0];
}
return$output;
}?>
hope it works for other people too
[#10]
tularis at php dot net [2007-05-06 12:55:55]
On Windows systems people might find that this always returns "application/x-dpkg".
There are 2 ways of solving this problem:
1. Get the mime-magic database file from GnuWin32 at
2. You can manually "fix" the mime-magic file by editing it and escaping all lines starting with !, thus changing each one to \!