2008年09月10日

PHPのmimetype判定に思わぬ罠

サークル内で使用するグループウェアのセキュリティ維持のため、画像やファイルにアクセス制限をかける取り組みを行っている。

ファイルや画像にアクセス制限をかけるにはhtaccessをいじる、BASIC認証を使う、Java等で制御するといった方法があるが、セッションベースでのPHPページでは上記の方法は使いづらい。

PHPでセッションを張っている間は、指定したIPアドレスのみを受け付けるようなhtaccessを動的に生成するのはいい方法だが、
これだと同じIPアドレスの人間なら関係なくアクセスできるし、htaccessファイルが消えないなどの面倒な問題も生じやすい。

BASIC認証では、PHPでセッションを張る際とファイルを見る際に二度認証が必要になるので却下。
Javaを使用する方法はそもそもよく分からない。

というわけで今回は、読みたいファイルがあったらそれのパスをPHPに投げ、PHPでヘッダを書き換えてファイルをバイナリで出力方法を使うことにした。

今回はそれの覚書をしておきたい。

書き換えるにあたり、header関数でMIMEタイプを定義して出力する必要があるのだが、
PHPでmimeタイプを判定する関数mime_content_type関数が使えないのである。

mime_content_type() [http://www.php.net/mime_magic]: mime_magic not initialized in

というエラーが出て、だ。

仕方なしにfileinfoを使用することに(これは使用するにあたりインスタンス生成がめんどくさい)したのだが、そうすると今度はヘッダが
「application/x-dpkg」となってしまう。

どうやらこれ、Windowsのmimeタイプ識別モジュールがおかしいらしい。

で、ここからが問題だ。

他のサイトでは、GNUWin32からfileパッケージをダウンロードしてphp\extra\ディレクトリにmagicファイルを挿入するとあるのだが、実は最新版(4.25)のGnuWin32では、必要なファイルが全て揃わないのである。

最新のGnuWin32では、Shareフォルダにmagicとmagic.mimeしかないが、実際にはmagic.mgcとmagic.mime.mgcが追加で必要となるみたいだ。

したがって、この4つのmagicファイルが含まれるアーカイブは4.23となる。
『他のサイトでは「4つのファイルを・・・」などと書いているが、実際には2つしかない』などと思っている方は、古いVerのダウンロードで改善できる必要がある。
posted by 神乃木龍一 at 20:16 | Comment(0) | TrackBack(0) | 日記
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

この記事へのトラックバックURL
http://blog.seesaa.jp/tb/106353012

この記事へのトラックバック