PHP PEAR Date_Holidays_Driver_Japanese をインストールする。
■ ■ ■
PHP では,Date_Holidays_Driver_Japanese を使うと休日判定ができる。このモジュールは,内部で PEAR Date_Holidays を呼んでいる。
テスト環境は,Vine Linux 4.2 (kernel 2.6.16), PHP 5.2.6 である。
インストール
まず,PEAR Date_Holidays をインストールする。関連モジュールもすべてインストールするように,--alldeps オプションをつけておく。現時点での最新版のバージョンは 0.19.1 (PEAR :: Package :: Date_Holidays :: 0.19.1)。alpha 版なので,パッケージ名に「-alpha」をつける必要がある。
# pear install --alldeps Date_Holidays-alpha
私の環境では,依存モジュールとして Date-1.5.0a1, Console_Getargs-1.3.4, Numbers_Words-0.15.0, XML_Util-1.2.0RC1, XML_Parser-1.2.8, XML_Serializer-0.18.0 がインストールされた。
次に Date_Holidays_Driver_Japanese をインストールする。最新版は 0.2.2 である (PEAR::Date_Holidays_Driver_Japanese 0.2.2 - Do You PHP はてな)。オプションの「-af」は「--alldeps --force」と同じ意味である。インストールオプションは「pear help install」と入力することで表示させることができる。
# pear install -af http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz
Could not download from "http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz" (File http://www.doyouphp.jp:80/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz not valid (received: HTTP/1.1 404 Not Found
))
Invalid or missing remote package file
Package "http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz" is not valid
install failed
上のように,ファイルが見つからずに失敗する場合は,1つバージョンを下げてみる。
# pear install -af http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.1.tgz
downloading Date_Holidays_Driver_Japanese-0.2.1.tgz ...
Starting to download Date_Holidays_Driver_Japanese-0.2.1.tgz (10,139 bytes)
.....done: 10,139 bytes
install ok: channel://__uri/Date_Holidays_Driver_Japanese-0.2.1
すでにパッケージがインストールされている場合,バージョンアップ版をインストールするには「install」の代わりに「upgrade」を指定する。
# pear upgrade -af http://www.doyouphp.jp/pear/Date_Holidays_Driver_Japanese-0.2.2.tgz
downloading Date_Holidays_Driver_Japanese-0.2.2.tgz ...
Starting to download Date_Holidays_Driver_Japanese-0.2.2.tgz (10,921 bytes)
.....done: 10,921 bytes
upgrade ok: channel://__uri/Date_Holidays_Driver_Japanese-0.2.2
テスト
動作確認を,眠る開発屋blog » Date_Holidays_Driver_Japaneseを使ってみるとか さんのコードでやってみる。
動作はするのだが,非常に重く,怖くなってきたので思わず Ctrl-C。眠る開発屋blog » Date_Holidays_Driver_Japaneseを使ってみるとか2 さんには,メモリ消費量とかかった時間を表示させる例がある。isHoliday() はコストが高すぎる。そこで,うえちょこ@ぼろぐ » [php][PEAR]PEAR::Date_Holidays_Driver_Japanese 0.2.2リリース さんのアイデアをもらって,Date_Holidays_Driver::getHolidayForDate() が null かどうかで判定することにする。
<?php
ini_set('display_errors', 'On');
require_once('Date/Holidays.php');
$obj =& Date_Holidays::factory('Japanese', 2008);
for ($i = 1; $i <= 366; $i++) {
$t = mktime(0, 0, 0, 1, $i, 2008);
$date = date('Y-m-d', $t);
if (! is_null($obj->getHolidayForDate($date, 'C'))) {
echo "[{$date}] holiday\n";
}
}
?>
これならOKだ。
Posted by n at 2008-07-24 23:49 | Edit | Comments (2) | Trackback(0)
すみません。。。0.2.2がちゃんとサーバに上がっていませんでした。
Posted by: shimooka at July 25, 2008 14:29上げなおしましたので、再度確認してもらえるとありがたいです。
shimooka さん
Posted by: n at July 26, 2008 17:45無事アップグレードできました。対応ありがとうございました。記事にも反映しました。