Zend_File_Transfer_Adapter_Httpでファイルをアップロードするとき、
$adapter->addValidator('MimeType', false, array('image/gif', 'image/png', 'image/jpg', 'image/jpeg', 'image/pjpeg', 'image/x-png')); // jpg, png, gifこんなんとか、
$adapter->addValidator('IsImage', false);こんなんとかを使ってMimeTypeのチェックをしようと思ったが、なぜかうまくいかない。
見ると、
Zend_Validate_File_IsImage::NOT_DETECTED
のエラーを吐いてる。
どうやらmimetypeが取得できないみたい。
コードに問題はなさそうだし、なんか挙動がよくわからないので、Zend/Validate/File/MimeType.php の中身を見る。
追っていくと、途中の
} else if (!(class_exists('finfo', false))) {
に引っかかって Exceptionが飛んでる。
どうやらfinfoがないみたい。
調べると pecl経由でfileinfoを入れればよさそう。
(自分の環境はCentOS 5.5)
一応チェック
$ php -i | grep fileinfo (何も出ない)
なので、やっぱり入ってないみたい。
うーむ、しかし内部的に finfo_open()を使ってるんだなー。。。
というわけで、fileinfoをインストール。
peclでphpizeを使うため、手始めにphp-develをインストール。
$ sudo yum install php-devel ..... Installed: php-devel.x86_64 0:5.2.10-1.el5.centos Complete!
続いて、peclコマンドでfileinfoをインストール。
$ sudo pecl install fileinfo ..... Build process completed successfully Installing '/usr/lib64/php/modules/fileinfo.so' install ok: channel://pear.php.net/Fileinfo-1.0.4
これでOK。
あとは設定ファイルに書いてモジュールをロードする。
$ sudo vim /etc/php.d/fileinfo.ini extension=fileinfo.so
で再起動。
$ sudo /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
$ php -i | grep fileinfo /etc/php.d/fileinfo.ini, fileinfo fileinfo support => enabled
enabledになってればOK
これでMimeTypeのチェックがちゃんと動いた。