PHPでicsファイル形式をダウンロードできるようにする

2022/09/10

ある案件で、icsファイルをダウンロードさせたいという要望があり、使ったライブラリ関係での情報が全然なかったのでメモしておきます。

PHPのフレームワークはCodeigniter3を利用しています。
icsファイル生成には、Zap Calendar iCalendar Libraryを利用しました。
※このライブラリを選定した理由は、クライアントからの指定があったというだけです。

Zap Calendar iCalendar Libraryには、composerでインストールするんではないようなので、ダウンロードしてきたものを適当なディレクトに保存しておきます。

// iCalendarライブラリをインポート
require_once '【path_to_iCalender_directory】/zapcallib.php'; 

// インスタンス生成
$icalObj = new ZCiCal();
// イベント生成スタート
$eventObj = new ZCiCalNode('VEVENT', $icalObj->curnode);
// タイトル
$eventObj->addNode(new ZCiCalDataNode('SUMMARY:' . 'タイトル'));
// 開始時間
$eventObj->addNode(new ZCiCalDataNode('DTSTART:' . ZCiCal::fromSqlDateTime('2022-9-10-12:00:00')));
// 終了時間
$eventObj->addNode(new ZCiCalDataNode('DTEND:' . ZCiCal::fromSqlDateTime('2022-9-10-13:00:00')));
// 内容
$eventObj->addNode(new ZCiCalDataNode('DESCRIPTION:' . '内容を入力'));
// 場所
$eventObj->addNode(new ZCiCalDataNode('LOCATION:' . '場所'));
// UID
$eventObj->addNode(new ZCiCalDataNode('UID:' . 'ランダムなuid')); <= 必要ないかも。同じUIDで作成したicsファイルでも別の予定としてoutlookでは取り込めました。

// ダウンロード
$this->load->helper('download'); // codeigniterのhelper
force_download('ファイル名' . 'ics', $icalObj->export(), 'text/calendar');

内容自体はすごく簡単なんですが、ライブラリの公式ドキュメントの方で、DESCRIPTIONやLOCATIONの説明などが見つけられず、icsファイルのフォーマットを確認したりしたので、情報がまとまっている方がいいだろうと思い、残しておきます。

ダウンロードのところは各フレームワークに従ってもらえればいいので、もしほかのクライアントから要望があった場合は、出力内容さえ決めてもらえればサクッと実装できそうですね。

サニージェム公式note

アーカイブ記事

すべて
  • 1月
  • 2月
  • 3月
  • 4月
  • 5月
  • 6月
  • 7月
  • 8月
  • 9月
  • 10月
  • 11月
  • 12月

contact us お問い合わせ

Contact お問い合わせ・ご相談

「何から相談すればいいかわからない」
そんな段階でも、お気軽にご連絡ください。

Recruit 求人へのご応募

サニージェムの考え方に共感してくれる方と、
ぜひ一緒に働きたいと思っています。