来自php的动态.ics未在Google日历中更新

San*_*der 5 php icalendar google-calendar-api

我一直在尝试在php中创建一个.ics页面,该页面将通过"Add by URL"添加到Google Calendar中,以便我从数据库中检索事件并将其显示在日历中.

我已经搜索了一段时间,并发现了另一篇文章,这对开始非常有帮助,但我现在遇到了一个似乎并没有影响那些具有类似代码的障碍.邮政可以在这里找到.

所以,我的问题是我似乎无法让Google日历更新我的页面,就好像它已在日历中缓存了页面一样.因此,当我向页面添加另一个VEVENT时,它不会更新日历.

创建文件时,它会为*.ics文件生成正确的格式.格式如下所示.

如果我直接进入页面,我会收到提示下载文件,该文件可以导入GC,如果我将相同的代码添加到不同的页面,例如将页面名称从cal.php更改cal2.php,将使GC读取所有事件,而当我只是添加相同的URL时,它不会接收对文件所做的任何更改.

任何人都知道为什么这不更新?

有其他类似问题的人通过在他们的VEVENT上添加一个UID来解决这个问题,这对我来说没有解决这个问题......

格式生成

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:17d88c861131ec62f18835cdd4eb7d0c@yourhost.test
DTSTAMP:20110901T092002Z
DTSTART:20110925T170000Z
DTEND:20110928T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
BEGIN:VEVENT
UID:00813115d1a2d21447eb11ded3ba9020@yourhost.test
DTSTAMP:20110901T092002Z
DTSTART:20110929T170000Z
DTEND:20110930T035959Z
SUMMARY:Camping Trip
END:VEVENT
BEGIN:VEVENT
UID:1f18d85fe516d684536129ed066e7d4f@yourhost.test
DTSTAMP:20110901T092002Z
DTSTART:20110914T170000Z
DTEND:20110915T035959Z
SUMMARY:Testing new Event
END:VEVENT
END:VCALENDAR
Run Code Online (Sandbox Code Playgroud)

使用的代码

<?php
header("Content-Type: text/Calendar");
header("Content-Disposition: inline; filename=\"calendar.ics\"");
echo "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:20110925T170000Z
DTEND:20110928T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)) . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:20110929T170000Z
DTEND:20110930T035959Z
SUMMARY:Camping Trip
END:VEVENT
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)) . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:20110914T170000Z
DTEND:20110915T035959Z
SUMMARY:Testing new Event
END:VEVENT
END:VCALENDAR";
?>
Run Code Online (Sandbox Code Playgroud)

anm*_*ari 2

csanyigabor 是正确的。此外,您还必须确保 UID 相同,以便应用程序能够匹配事件。这里的这个问题和答案涉及取消,但原理是相同的 如何使用 ics 文件取消日历事件?