111

PHP ical で Google 検索を行うと、phpicalendar と、IN ical ファイルを解析または読み取る方法が表示されます。データベースからイベントを取得し、それらを ical 形式で書き出す PHP ファイルを書きたいだけです。

私の問題は、次の 2 つの質問に答えられる場所が見つからないことです。

  1. ヘッダー、ファイル形式、フッターなどを含む正確なical 形式は何ですか? つまり、Google カレンダーなどで適切に読み込まれるためには、正確には、ファイルに何が必要なのでしょうか?
  2. 拡張子 .php を使用してこのファイルを作成した場合、それを ical として公開するにはどうすればよいですか? 新しい .ics ファイルに書き込む必要がありますか? または、コンテンツが正しい形式である限り、Google カレンダーなどは .php ファイルを ical として読み取りますか? (内容が実際に CSS である場合、style.css.php ファイルが CSS ファイルとして読み込まれるのと同じように)

皆さんが私に与えたり指摘したりできる助けは大歓迎です!!!

4

7 に答える 7

135

*.icsGoogle カレンダーが-extension を必要としない場合、これは非常に簡単です(サーバーで URL の書き換えが必要になります)。

$ical = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)) . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR";

//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=calendar.ics');
echo $ical;
exit;

キャッシングやテキスト エンコーディングなどに関していくつかの問題があるかもしれませんが、iCalendar ファイルを提供しているとクライアントに思わせるために必要なのは基本的にこれだけです。しかし、この単純なコードを試してみることはできます。

于 2009-09-23T06:59:32.177 に答える
23

Stefan Gehrig の回答と Dave None の回答 (および mmmshuddup の回答) の両方に加えて、個人的な経験のメモ:

http://severinghaus.org/projects/icv/で ICS バリデーターを使用したときに、\n と PHP_EOL の両方を使用して検証の問題が発生しました。

適切に検証するには \r\n を使用する必要があることを知ったので、これが私の解決策でした:

function dateToCal($timestamp) {
  return date('Ymd\Tgis\Z', $timestamp);
}

function escapeString($string) {
  return preg_replace('/([\,;])/','\\\$1', $string);
}    

    $eol = "\r\n";
    $load = "BEGIN:VCALENDAR" . $eol .
    "VERSION:2.0" . $eol .
    "PRODID:-//project/author//NONSGML v1.0//EN" . $eol .
    "CALSCALE:GREGORIAN" . $eol .
    "BEGIN:VEVENT" . $eol .
    "DTEND:" . dateToCal($end) . $eol .
    "UID:" . $id . $eol .
    "DTSTAMP:" . dateToCal(time()) . $eol .
    "DESCRIPTION:" . htmlspecialchars($title) . $eol .
    "URL;VALUE=URI:" . htmlspecialchars($url) . $eol .
    "SUMMARY:" . htmlspecialchars($description) . $eol .
    "DTSTART:" . dateToCal($start) . $eol .
    "END:VEVENT" . $eol .
    "END:VCALENDAR";

    $filename="Event-".$id;

    // Set the headers
    header('Content-type: text/calendar; charset=utf-8');
    header('Content-Disposition: attachment; filename=' . $filename);

    // Dump load
    echo $load;

これにより、解析エラーが停止し、ICS ファイルが適切に検証されるようになりました。

于 2013-09-20T03:14:48.710 に答える
7

ics ファイルを簡単に作成できる優れたeluceo/icalパッケージがあります。

ドキュメントからの使用例を次に示します。

// 1. Create new calendar
$vCalendar = new \Eluceo\iCal\Component\Calendar('www.example.com');

// 2. Create an event
$vEvent = new \Eluceo\iCal\Component\Event();
$vEvent->setDtStart(new \DateTime('2012-12-24'));
$vEvent->setDtEnd(new \DateTime('2012-12-24'));
$vEvent->setNoTime(true);
$vEvent->setSummary('Christmas');

// Adding Timezone (optional)
$vEvent->setUseTimezone(true);

// 3. Add event to calendar
$vCalendar->addComponent($vEvent);

// 4. Set headers
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="cal.ics"');

// 5. Output
echo $vCalendar->render();
于 2016-04-13T10:33:05.800 に答える
4

少し遅いかもしれませんが、実際の仕様へのリンクを次に示します。https://www.rfc-editor.org/rfc/rfc5545[1]

于 2014-01-07T08:58:47.950 に答える
4

http://www.kanzaki.com/docs/ical/には、古い仕様のもう少し読みやすいバージョンがあります。出発点として役立ちます - 多くのことはまだ同じです。

また、私のサイトには、

  1. 役立つリソースのリスト (右下のサイドバーを参照)
    • ical 仕様 RFC 5545
    • ical テスト リソース
  2. .ics過去数年間の私の旅で記録されたいくつかのメモ。特に、この繰り返しイベントの「チートシート」が役立つ場合があります。

.ics慎重な取り扱いが必要な領域:

  • 「終日」イベント
  • 日付の種類 (タイムゾーン、UTC、またはローカルの「フローティング」) - 違いを理解するための注記
  • 繰り返しルールの相互運用性
于 2012-05-08T02:30:04.213 に答える
2
  1. 正確な形式: http://www.ietf.org/rfc/rfc2445.txt
  2. 仕様によると、.ics で終わる必要があります。

編集:実際にはわかりません-6186行目は.ics命名形式の例を示していますが、urlパラメーターを使用できるとも述べています。MIME タイプが正しい限り、問題ではないと思います。

編集: ウィキペディアの例: http://en.wikipedia.org/wiki/ICalendar

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR

MIME タイプはサーバー上で構成されます。

于 2009-09-23T01:20:44.897 に答える