社内の予定表をiCal形式のファイルで管理しているけど、iPhone/iPod touchのカレンダーや Googleカレンダー と連携するために読み込むとファイルサイズが大きくて時間がかかってしまうので、イベント数を制限して出力できないかと調査したメモ。 まず iCalendar (vCalendar)形式のファイルをPHPでパースできないかと調べてみると、Pearの File_IMC で読み込めて配列に格納できるみたい。 実際に使ってみると確かに連想配列形式にしてくれるけど、全てパースしていると遅いし、編集した結果を出力できないので使いづらい。 しょうがないので自力で正規表現を使ってやってみた。 以下ソース。 <?php /** * ical形式のファイルからイベント情報を制限して出力する * 外部のカレンダー(Google カレンダーやiPhone)用 * デフォルトイベント数:100 * limitに負の値を指定すれば全てのイベント */ //パラメータからicalファイル名を取得 $sFileName = ''; if (isset($_GET['ical'])) { if (strlen($_GET['ical']) > 0 ) { $sFileName = $_GET['ical']; } if (strpos($sFileName, '.ics') === false) { //拡張子がicsファイルのみ $sFileName .= '.ics'; } } //パラメータから制限数を取得 $iLimit = 100; if (isset($_GET['limit'])) { if (is_numeric($_GET['limit'])) { $iLimit = $_GET['limit']; } } $sCal = getLimitCal($sFileName, $iLimit); if (strlen($sCal) > 0) { header(&