(PHP >= 5.3.0, PECL fileinfo >= 0.1.0)

finfo_open -- finfo::__constructСоздает ресурс Fileinfo


Процедурный стиль

resource finfo_open ([ int $options = FILEINFO_NONE [, string $magic_file = NULL ]] )

Объектно-ориентированный стиль (constructor):

finfo::__construct ([ int $options = FILEINFO_NONE [, string $magic_file = NULL ]] )

Данная функция открывает магическую базу данных и возвращает ресурс на нее.

Список параметров


Одна из нескольких Fileinfo констант.


Имя файла магической базы данных, обычно что-то наподобие этого: /path/to/magic.mime. Если не указан полный путь, будет использована переменная окружения MAGIC. Если эта переменная не указана, будет использован путь по умолчанию /usr/share/misc/magic. При необходимости добавляется суффикс .mime и/или .mgc.

Передача NULL или пустой строки эквивалентно значению по умолчанию.

Возвращаемые значения

(Только процедурный стиль) Возвращает ресурс магической базы данных в случае успеха или или FALSE в случае возникновения ошибки.



Начиная с PHP >= 5.3.11 и >= 5.4.1 формат магической базы данных изменен. Вследствие этого внутренняя база данных mime была также обновлена. Особенно это влияет на код, где читается внешняя база magic. Чтение magic-файлов старых форматов работать не будет. Также изменены некоторые текстовые представления mime-типов, например, для PHP будет возвражено "PHP script, ASCII text" вместо "PHP script text".


Пример #1 Объектно-ориентированный стиль

= new finfo(FILEINFO_MIME"/usr/share/misc/magic"); // возвращает mime-тип аля mimetype расширения

/* получить mime-type для указанного файла */
$filename "/usr/local/something.txt";


Пример #2 Процедурный стиль

finfo_open(FILEINFO_MIME"/usr/share/misc/magic"); // возвращает mime-тип аля mimetype расширения

if (!$finfo) {
"Opening fileinfo database failed";

/* получить mime-type для указанного файла */
$filename "/usr/local/something.txt";

/* закрыть соединение */

Результат выполнения данного примера:

text/plain; charset=us-ascii

Смотрите также


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 \!
2007-05-06 15:55:55
Couldn't get finfo to return the mimetype in the way expected so i made a function to do it with system()

function get_mime_type($filepath) {
system("file -i -b {$filepath}");
$output ob_get_clean();
$output explode("; ",$output);
    if ( 
is_array($output) ) {
$output $output[0];

hope it works for other people too
2007-11-02 10:50:55
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:
$handle finfo_open(FILEINFO_MIME'/usr/share/file/magic');
$mime_type finfo_file($handle,$file);
2008-01-23 09:41:40
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:

2. PHP Code:
$finfo = new finfo(FILEINFO_MIME'c:\php\magic');
  if (!
$finfo) return false;

For further info see:

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.
2008-04-16 06:15:42
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.
2008-09-15 06:13:53
It seems there is quite some inconsistency in distributions and loading of magic files.

On Archlinux, the file is located here:

But this:

= new finfo(FILEINFO_MIME'/usr/share/misc/file/magic');

Actually segfaults, where if I type the full name (including the file extension:)

= new finfo(FILEINFO_MIME'/usr/share/misc/file/magic.mgc'); // added ".mgc"

It works as expected, so I guess something goes wrong with "A .mime and/or .mgc suffix is added if needed."
2008-11-09 14:34:08
Notice FileInfo::__construct() has strange behavior in PHP < 5.3.1 when a 2nd parameter is set explicitly, e.g.;

= new finfo(FILEINFO_MIMEnull);

Expected result:
object(finfo)#2 (0) { }

Actual result:
Warning: finfo::finfo(): Failed to load magic database at ''. in *** on line ***
object(finfo)#2 (0) { }

2010-05-11 03:23:30
On my Debian squeeze system, the path needed is like :
= new finfo(FILEINFO_MIME"/usr/share/misc/magic.mgc");
2011-03-09 14:02:24
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:

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!
2012-02-06 02:53:36
For most common image files:
function minimime($fname) {
    if (
$fh) { 
        if (
$bytes6===false) return false;
        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';
2013-07-04 22:41:50

    Поддержать сайт на родительском проекте КГБ