finfo_open

finfo::__construct

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

finfo_open -- finfo::__constructСоздаёт экземпляр finfo

Описание

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

finfo_open(int $flags = FILEINFO_NONE, ?string $magic_database = null): finfo|false

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

public finfo::__construct(int $flags = FILEINFO_NONE, ?string $magic_database = null)

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

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

flags

Одна или несколько объединённых через бинарное ИЛИ констант Fileinfo.

magic_database

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

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

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

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

Список изменений

Версия Описание
8.1.0 Возвращает экземпляр finfo; ранее возвращался ресурс (resource).
8.0.3 magic_database теперь допускает значение null.

Примеры

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

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

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

?>

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

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

if (!$finfo) {
echo
"Открытие базы данных fileinfo не удалось";
exit();
}

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

/* закрыть соединение */
finfo_close($finfo);
?>

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

text/plain; charset=us-ascii

Примечания

Замечание:

Обычно использование встроенной магической базы данных (при неустановленных magic_database и MAGIC) лучший выбор, если вам не нужна определённая версия магической базы данных.

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

Добавить

Примечания пользователей 9 notes

up
19
illusivefingers at gmail dot com
13 years ago
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/downloadAn 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!
up
3
dario dot borreguero at gmail dot com
17 years ago
Platform: WinXP-SP2, PHP5.2.5, MySQL 5.0, Apache 2.2.8After 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\magic2. PHP Code:<?php  $filname = 'c:\php\php.ini';  $finfo = new finfo(FILEINFO_MIME, 'c:\php\magic');  if (!$finfo) return false;  echo $finfo->file($filename);?>For further info see: http://pecl.php.net/bugs/bug.php?id=7555Pay 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.
up
9
Anonymous
12 years ago
For most common image files:<?phpfunction minimime($fname) {    $fh=fopen($fname,'rb');    if ($fh) {         $bytes6=fread($fh,6);        fclose($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';        return 'application/octet-stream';    }    return false;}?>
up
0
olivier dot berger at it-sudparis dot eu
14 years ago
On my Debian squeeze system, the path needed is like :<?php  $finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic.mgc");?>
up
0
php at brudaswen dot de
16 years ago
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.
up
0
php at kingsquare dot nl
17 years ago
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:<?php$file = "/path/to/file.jpg";$handle = finfo_open(FILEINFO_MIME, '/usr/share/file/magic');$mime_type = finfo_file($handle,$file);?>
up
0
ian at createanet dot co dot uk
17 years ago
Couldn't get finfo to return the mimetype in the way expected so i made a function to do it with system()<?php function get_mime_type($filepath) {    ob_start();    system("file -i -b {$filepath}");    $output = ob_get_clean();    $output = explode("; ",$output);    if ( is_array($output) ) {        $output = $output[0];    }    return $output;}?>hope it works for other people too
up
-1
mark at dynom dot nl
16 years ago
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.mgcBut this:<?php$fi = new finfo(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:)<?php$fi = new finfo(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."
up
-4
tularis at php dot net
18 years ago
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 <http://sourceforge.net/projects/gnuwin32/>2. You can manually "fix" the mime-magic file by editing it and escaping all lines starting with !, thus changing each one to \!
To Top