文字

finfo_open

finfo::__construct

(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 ]] )

面向对象风格 (构造器):

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

本函数打开一个魔数数据库并且返回它的资源。

参数

options

一个 Fileinfo 常量 或多个 Fileinfo 常量 进行逻辑或运算。

magic_file

魔数数据库文件名称, 通常是 /path/to/magic.mime。 如果未指定,则使用 MAGIC 环境变量。 如果未指定此环境变量, 则使用 PHP 绑定的魔数数据库。

传入 NULL 或者空字符串,等同于使用默认值。

返回值

(仅适用于过程化风格) 如果成功则返回一个表示魔数数据库的资源, 或者在失败时返回 FALSE

注释

Warning

在 PHP 5.3.11 和 5.4.1 中预期的魔数数据库格式发生了变动, 所以,内置的魔数数据库被更新。 如果使用了外部魔数数据库, 可能会由于格式不同导致读取失败。 同时,一些 mime 类型的文字表示也发生了变化, 例如,PHP 文件的 mime 类型由 “"PHP script text” 变为“PHP script, ASCII text”。

Note:

通常来说,使用 PHP 绑定的魔数数据库(设置 magic_file 参数为空, 不设置 MAGIC 环境变量)是最好的选择, 除非你确实需要一个自定义的魔数数据库。

范例

Example #1 面向对象风格

<?php
$finfo 
= new  finfo ( FILEINFO_MIME "/usr/share/misc/magic" );  // 返回 mime 类型


$filename  "/usr/local/something.txt" ;
echo 
$finfo -> file ( $filename );

?>

Example #2 过程化风格

<?php
$finfo 
finfo_open ( FILEINFO_MIME "/usr/share/misc/magic" );  // 返回 mime 类型

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


$filename  "/usr/local/something.txt" ;
echo 
finfo_file ( $finfo $filename );


finfo_close ( $finfo );
?>

以上例程会输出:

text/plain; charset=us-ascii

参见

  • finfo_close() - 关闭 fileinfo 资源

用户评论:

[#1] Anonymous [2013-07-04 19:41:50]

For most common image files:
<?php
function 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;
}
?>

[#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 :
<?php 
 $finfo 
= new finfo(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 < 5.3.1 when a 2nd parameter is set explicitly, e.g.;

<?php
$fileInfo 
= 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) { }

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:

<?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."

[#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:
<?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=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:
<?php
$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()

<?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

[#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 <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 \!

上一篇: 下一篇: