ラベル zend の投稿を表示しています。 すべての投稿を表示
ラベル zend の投稿を表示しています。 すべての投稿を表示

2010年9月28日火曜日

zendのgetParam()はデフォルト値を取れる

使い始めのころは知らなかった。
いちいち空チェックをやってた。

たとえばページ番号なんかをpageパラメータから取得するときに
$page = $this->getRequest()->getParam('page', 1);
とかやれば、pageパラメータにデフォルトで1が入る。


まぁ普通にソース見てもいいし、ドキュメントにも書いてあるので、
とりあえず、API Documentationは一通り見ようと思った。

Zend Framework API Documentation

Zend FrameworkのMimeType Validatorがうまく動かない。

Zendを使っていて、
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のチェックがちゃんと動いた。

2010年9月9日木曜日

Zend_Logを使ってファイルにログを吐く

Zend_Logを使ってファイルにログを吐くときの個人的な定型
require_once("Zend/Log.php");
require_once("Zend/Log/Writer/Stream.php");
require_once("Zend/Log/Filter/Priority.php");
require_once("Zend/Log/Formatter/Simple.php");

// output format
$time = date('Y/m/d H:i:s');
$format = "{$time} %priorityName% (%priority%): %message%" . PHP_EOL;
$formatter = new Zend_Log_Formatter_Simple($format);
$writer = new Zend_Log_Writer_Stream('/****/****/****/logs/error_log'); // set log file path
$writer->setFormatter($formatter);

// setting log level
$filter = new Zend_Log_Filter_Priority(Zend_Log::DEBUG);
$log = new Zend_Log();
$log->addWriter($writer);
$log->addFilter($filter);

// write log
$log->debug('hogehoge');