2

データベース内のイベントからiCalカレンダーを生成するスクリプトを作成しました。出力例は次のとおりです。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
ORGANIZER;CN=Blodgruppen
DTSTART:20130128T173000Z
DTEND: 20130128T193000Z
SUMMARY: Su-möte
END:VEVENT
BEGIN:VEVENT
ORGANIZER;CN=F-styret
DTSTART:20130128T173000Z
DTEND: 20130128T193000Z
SUMMARY: Su-möte
END:VEVENT
BEGIN:VEVENT
ORGANIZER;CN=Blodgruppen
DTSTART:20130412T100000Z
DTEND: 20130414T180000Z
SUMMARY: KTH
END:VEVENT
BEGIN:VEVENT
ORGANIZER;CN=F-styret
DTSTART:20130412T100000Z
DTEND: 20130414T180000Z
SUMMARY: KTH
END:VEVENT
END:VCALENDAR

iCalでこれをサブスクライブしようとすると、ファイルが無効であると表示されます。誰かが理由を知っていますか?

また、ファイルの末尾が.icsではなく.phpであるために、どこかで問題が発生するかどうかを誰かが知っていますか?

(役立つ場合は、ウィキペディアの例を見て上記を作成しました:http: //en.wikipedia.org/wiki/ICalendar#Core_object

4

4 に答える 4

3

基本に戻ると、PHPスクリプトをアップロードできません。一部のカレンダークライアントでは、URLをサブスクライブしてiCalフィードを取得できます。これが実行中であり、PHPスクリプトをアップロードしようとしていないことを確認してください。ファイル。

それでよければ、定義を見ることができます。ドキュメントによると、ORGANIZERパラメータはオプションです。含まれている場合は、コロン:と、 URIである必要があるcal-addressが必要です。フィールドは次のようになります。ORGANIZER

ORGANIZER;CN=Blodgruppen

これらは次のようになります。

ORGANIZER;CN=Blodgruppen:URI

URIが必ずしもmailtoである必要はない場合、ここにいくつかの例があります。便宜上、このようにメールアドレスを追加することができます...

ORGANIZER;CN=Blodgruppen:MAILTO:bob@b.com

または電話番号...

ORGANIZER;CN=Blodgruppen:TEL:+49-01234-56789

ftp URLのWebだけでなく、他のあまり使用されていないものを含めることができます。または、パラメータは不要なので、削除するだけで済みます。

また、必須のプロパティであるaとaVEVENTが欠落しているようです。UIDDTSTAMP

UID選択した識別子にすることができますが、グローバルに一意である必要があります。パラメータの意味を説明することにより、グローバルに一意であるとはどういう意味かを説明しUIDます。カレンダークライアントはこれを使用してイベントを識別します。カレンダーにすでに存在するイベントのIDを使用すると、そのイベントが更新されると考えて更新されるため、既存のイベントのIDと一致してはなりません。 。イベントを含む可能性のある多くの異なるカレンダークライアントにイベントを追加することを考える場合、これが「グローバルに」一意である必要がある理由です。PHPで使用できる関数があり、uniqid()グローバルに一意の独自の識別子を作成するのに役立つ場合があります。

DTSTAMPイベントが作成された時間、または最後に更新された時間です。

定義内の空白は一貫性がなく、ドキュメントではパラメーターと値の間の空白については説明されていませんが、すべての例は空白なしで示されているため、必須ではない空白を削除することもできます...

DTEND: 20130128T193000Z

なるために...

DTEND:20130128T193000Z

痛くないかもしれませんが、可能性はあります。また、問題の原因となっているiCal定義であることを確認するために、最小限のパラメーターで1つのイベントを試すことから始めます。

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:20121229T212000Z-test-1
DTSTAMP:20121229T212000Z
DTSTART:20130128T173000Z
DTEND:20130128T193000Z
END:VEVENT
END:VCALENDAR

PHPスクリプトが正しいmimeタイプを使用していることも確認することをお勧めしますtext/calendar。そうでない場合は、次の関数Content-Typeを使用して応答にヘッダーを追加できます。header

 header("Content-Type: text/calendar");

これがお役に立てば幸いです...

于 2012-12-29T20:27:18.030 に答える
3

将来の使用のために、ここにいくつかのオンラインicalendarバリデーターがあります:

icalendar.orgは、サンプルで次のエラーを報告しました。

エラー

Missing DTSTAMP property near line # 4Reference: RFC 5545 3.6.1. Event Component
Missing UID property near line # 4Reference: RFC 5545 3.6.1. Event Component
Invalid DTEND value, must be a date or date-time value near line # 4Reference: 3.3.5. Date-Time
Missing DTSTAMP property near line # 10Reference: RFC 5545 3.6.1. Event Component
Missing UID property near line # 10Reference: RFC 5545 3.6.1. Event Component
Invalid DTEND value, must be a date or date-time value near line # 10Reference: 3.3.5. Date-Time
Missing DTSTAMP property near line # 16Reference: RFC 5545 3.6.1. Event Component
Missing UID property near line # 16Reference: RFC 5545 3.6.1. Event Component
Invalid DTEND value, must be a date or date-time value near line # 16Reference: 3.3.5. Date-Time
Missing DTSTAMP property near line # 22Reference: RFC 5545 3.6.1. Event Component
Missing UID property near line # 22Reference: RFC 5545 3.6.1. Event Component
Invalid DTEND value, must be a date or date-time value near line # 22Reference: 3.3.5. Date-Time
于 2016-04-17T13:32:45.277 に答える
0

iCalは現在PHPファイルをサポートしていませんが、ここで読むことができるように、便利な変換ツールがあります。iCalカレンダーをMySQLデータベースにインポートします。

于 2012-12-29T19:51:48.540 に答える
0

テストのためにicsファイルをGoogleカレンダーにインポートできます。

言い訳の1つは、各イベントにUIDプロパティが必要です。

そして、これらのイベントをグーグルカレンダーに簡単に投げることができます

于 2013-02-06T15:53:47.777 に答える