PHP でファイルの MIME-Type を判別する方法

2007年11月21日 02:26 PHP でファイルの MIME-Type を判別する方法

相変わらず、perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法と、その関連記事であるperl の CGI や PHP でよく出力する Content-type ヘッダ一覧 (MIME-type)へのアクセスが、うちのブログでは毎日アクセス上位2位を占めているので、さらに補完エントリーを書いてみます。

ファイルをダウンロードさせるスクリプトを書く際に、最初からそのファイルの MIME-Type が解っている場合は良いのですが、色んな種類のファイルをひとつのスクリプトでダウンロードさせる場合には、各ファイル個別に MIME-Type を判別して、Content-type ヘッダとして出力する必要があります。

perl の場合は多分、自分で MIME-Type 判別用の関数を作るとか、何らかのモジュールを使うとか、perl スクリプトから file コマンドとかそれに類する UNIX コマンドを呼び出すとかしないと無理なんじゃないかと思うんですが、PHP の場合は非常に簡単で、mime_content_type() という関数一つで事足りるようです。

// MIME-Typeを判別したいファイル
$source = '/home/tatsuya/data/img/00003.jpg';

// MIME-Type を判別
$mime_type = mime_content_type($source);

これで、「$mime_type」に、指定したファイルの MIME-Type が代入されます。

なので、perlやPHPでファイルのダウンロード確認ダイアログを表示させる方法で書いたようなダウンロードスクリプトを書く場合には、

// ダウンロードさせる元ファイル
$source = '/home/tatsuya/data/img/00004.jpg';
// MIME-Type を判別
$mime_type = mime_content_type($source);
// 保存時のファイル名
$filename = 'kagaminerin.jpg';

// HTTP ヘッダ送信
header("Content-type: {$mime_type}");
header("Content-Disposition: attachment; filename=\"{$filename}\"");
// ファイルを読み込んで出力
readfile($source);

こんな感じになります。

後は、GET や POST で受け取った値を元に $source$filename を変える処理を事前に作っておけばOKでしょう。

mime_content_type() 関数についての注意事項

PHP マニュアルの mime_content_type の項目を見ると、以下のように書いてあります。

この関数は非推奨です。PECL 拡張モジュール Fileinfo が、同等の機能 (それ以上のもの) をもっときれいな方法で提供しています。

ですので、PECL 拡張モジュールをインストールできる権限がある場合や、既にサーバーに Fileinfo 拡張モジュールが入っている場合は、この finfo_file 関数を使って MIME-Type を判別した方が良いかと思います。

Twitterつぶやく
阿部辰也へのお仕事のご依頼・お問合せはこちら

Twitter始めました。Followはお気軽にどうぞ。

関連するブログ記事
スポンサード リンク
カテゴリー
PHP
タグ
Content-Disposition | Content-type | Fileinfo | finfo_file | HTTPヘッダ | MIME | mime_content_type | PECL拡張モジュール | PHP | RFC | ダウンロード
現在位置
TOP > Web制作技術 > PHP > PHP でファイルの MIME-Type を判別する方法
前のブログ記事
メール受信時に perl スクリプトを起動して自動処理させる方法 [2007年11月20日 10:46]
次のブログ記事
ケータイの端末識別情報を取得する方法 [2007年11月22日 17:43]

トラックバック(0)

このブログ記事に対するトラックバックURL:

コメント(6)

ken [2009年3月17日 15:36]

はじめまして!!
最近このブログを発見して随分と重宝してます。
実はPHP超初心者で毎日奮闘してまして(笑)、ここ数日GD関数を勉強中です・・・。
MIME-Typeがかなり参考になり、自分でMIME-Typeを判別して画像を縮小するスクリプトに挑戦してますが、
GIF・JPEG画像はうまくいくのですがPNG画像でひっかかるんです・・・。
imagepng()関数って何か使用するにあたって設定とか必要なんでしょうか?
もしよければ教えて下さい!
素人質問で申し訳ありません・・・。

Tatsuya [2009年3月17日 19:04]

> kenさん
コメントありがとうございます。
imagepng についてですが、僕自身はつまったことがないんですが、画像系なので色々と環境に依存しそうですね。
phpinfo で環境を確認されてみてはいかがでしょうか。
「PNG SUPPORT」の項目が disabled になってるようなら、imagepng は使えないかもしれませんね。

ken [2009年3月17日 21:23]

早速の返信ありがとうございます!
phpinfo()で確認してみたところ、enabledになってました・・・。
ちょっとソースを解析したいと思います・・・。
また、質問させて下さい!
ありがとうございました。

payday loans [2013年11月28日 03:19]

cgmkzgyr http://paydayloansusapqh.com/ payday loans

short term loans [2014年5月15日 00:30]

rzyitb http://paydayloansitg.com/ short term loans

payday loans [2014年10月31日 18:59]

ssekznf http://2012paydayloans.net/ payday loans

コメントする


画像の中に見える文字を入力してください。

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム