PHP Conference Nagoya 2025

finfo_open

finfo->__construct

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

finfo_open -- finfo->__constructYeni bir fileinfo özkaynağı oluşturur

Açıklama

Yordamsal kullanım

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

Nesne yönelimli kullanım (kurucu):

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

Bu işlev sihirli bir veritabanı açar ve onu bir nesne olarak döndürür.

Bağımsız Değişkenler

flags

Fileinfo sabitlerinden biri veya bir kaçının birleşimi.

magic_database

Sihir veritabanının dosya ismi genellikle /bir/yol/magic.mime şeklindedir. Belirtilmezse MAGIC ortam değişkeninin değeri kullanılır. Bu değişken de atanmamışsa PHP paketinde gelen sihir veritabanı kullanılır.

null veya boş bir dizge atanması öntanımlı değerin kullanımına eşdeğer olacaktır.

Dönen Değerler

(Sadece yordamsal kullanımda) Başarı durumunda finfo nesnesi, başarısızlık durumunda false döner.

Sürüm Bilgisi

Sürüm: Açıklama
8.1.0 Artık finfo nesnesi dönüyor; evvelce finfo özkaynağı dönerdi.
8.0.3 magic_database artık null olabiliyor.

Örnekler

Örnek 1 - Nesne yönelimli kullanım örneği

<?php
// Bir açıklama değil MIME türü dönsün
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");

/* Bir dosyanın MIME türünü öğrenelim */
$dosya = "/usr/local/birdosya.txt";
echo
$finfo->file($dosya);
?>

Örnek 2 - Yordamsal kullanım örneği

<?php
// Bir açıklama değil MIME türü dönsün
$finfo = finfo_open(FILEINFO_MIME, "/usr/share/misc/magic");

if (!
$finfo) {
echo
"Fileinfo veritabanı açılamadı";
exit();
}

/* Bir dosyanın MIME türünü öğrenelim */
$dosya = "/usr/local/something.txt";
echo
finfo_file($finfo, $dosya);

/* Bağlantıyı kapatalım */
finfo_close($finfo);
?>

Yukarıdaki örneğin çıktısı:

text/plain; charset=us-ascii

Notlar

Bilginize:

Genellikle, (magic_database belirtmeyerek ve MAGIC ortam değişkenini atanmayarak) PHP paketinde gelen sihir veritabanını kullanmak, özellikle özel bir sihir veritabanına ihtiyaç olmadıkça en iyi seçim olacaktır.

Ayrıca Bakınız

add a note

User Contributed Notes 9 notes

up
19
illusivefingers at gmail dot com
12 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/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!
up
3
dario dot borreguero at gmail dot com
16 years ago
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.
up
9
Anonymous
11 years ago
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;
}
?>
up
0
olivier dot berger at it-sudparis dot eu
13 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
16 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.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."
up
-4
tularis at php dot net
17 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