PHPプログラミング

最終更新日:
公開日:

レシピ

ファイル / ディレクトリ

ファイルの種類(MIMEタイプ)を確認する

mime_content_type関数finfoクラスを使ってファイルの種類(MIMEタイプ)を取得する方法について解説します。

この記事のポイント

  • ファイルの種類を調べるためにmime_content_type関数finfoクラスでMIMEタイプを取得する
  • 最も手軽な確認方法はmime_content_type関数を使う方法

目次

ファイルのMIMEタイプを正確に調べる

ファイルにはJPEGやPNG、WebPなどの画像ファイル、HTMLやXMLなどのテキストファイル、動画ファイル、音源ファイルなど様々な種類があります。
PHPからどんな種類のファイルか確認したいときはファイルのMIMEタイプを調べます。

MIMEタイプを調べるもっとも手軽な方法はmime_content_type関数を使う方法です。
以下のようにファイルのパスを渡すと、「image/jpeg」や「text/plain」など引数で渡したパスのファイルのMIMEタイプを文字列で返します。

コード例

<?php

// MIMEタイプを確認したいファイルのパス
$file_path1 = '/test/images/index.html';
$file_path2 = '/test/images/';

// $file_path1のMIMEタイプを取得
$mimetype = mime_content_type($file_path1);
var_dump($mimetype); // string(9) "text/html"

// $file_path2のMIMEタイプを取得
$mimetype = mime_content_type($file_path2);
var_dump($mimetype); // string(9) "directory"

もし引数で渡したパスがファイルではなくディレクトリを指す場合は「string(9) "directory"」を返します。
また、ファイルが存在しない場合はfalseを返します。

具体的な用途の一例としては、ファイルアップロード機能を実装した時に$_FILESに入っているファイルのMIMEタイプを確認するケースが考えられます。

finfoクラスを使ってMIMEタイプを確認する

続いて、finfoクラスを使ったファイルのMIMEタイプを確認する方法について解説します。

コード例

<?php

// MIMEタイプを確認したいファイルのパス
$file_path1 = '/test/images/index.html';
$file_path2 = '/test/images/';

$finfo = new finfo();

// $file_path1のMIMEタイプを取得
$mimetype1 = $finfo->file( $file_path1, FILEINFO_MIME_TYPE);
var_dump($mimetype1); // string(9) "text/html"

// $file_path2のMIMEタイプを取得
$mimetype2 = $finfo->file( $file_path2, FILEINFO_MIME_TYPE);
var_dump($mimetype2); // string(9) "directory"

まず「new finfo();」の部分でfinfoクラスのインスタンスを作成してから、その後にfileメソッドでMIMEタイプを取得します。

fileメソッドの第1パラメータはファイルのパス、第2パラメータは「取得する情報の定数」です。
今回はMIMEタイプを取得するために「FILEINFO_MIME_TYPE」を指定しています。

その他にもMIMEエンコーディングを取得する「FILEINFO_MIME_ENCODING」、ファイルにあった拡張子を返す「FILEINFO_EXTENSION」などが定義されています。
定義された定数について、より詳しい内容はphp.netの「定義済み定数」よりご確認ください。

fileinfoリソースを使ってMIMEタイプを確認する

3つ目の方法は、fileinfoリソースを生成してファイルのMIMEタイプを取得する方法です。

コード例

<?php

// MIMEタイプを確認したいファイルのパス
$file_path1 = '/test/images/index.html';
$file_path2 = '/test/images/';

// $file_path1のMIMEタイプを取得
$file = finfo_open(FILEINFO_MIME_TYPE);
$mimetype1 = finfo_file($file, $file_path1);
finfo_close($file);

var_dump($mimetype1); // string(9) "text/html"


// $file_path2のMIMEタイプを取得
$file = finfo_open(FILEINFO_MIME_TYPE);
$mimetype2 = finfo_file($file, $file_path2);
finfo_close($file);

var_dump($mimetype2); // string(9) "directory"

最初にfinfo_open関数fileinfoリソースを取得して$fileへ格納します。
このとき、取得したい情報としてMIMEタイプを指定する定数FILEINFO_MIME_TYPEを引数に渡します。

続いて、finfo_file関数に先ほど取得したfileinfoリソース、ファイルへのパス、定数の順に指定します。
最後の定数は先ほどのfinfoクラスで使用したものと同一です。
そのため、ここの定数を変更すれば取得できる情報が同様に変わります。

最後にfinfo_close関数fileinfoリソースを閉じて終了します。
ファイルの種類を調べる方法としてはやや手順が多いため、MIMEタイプ以外のファイル情報も取得したいときに検討したい方法です。