使用 php 更新单个 ics 文件(icalendar 流)中的多个事件


Update of multiple events in a single ics file(icalendar stream) using php

在单个 ics 文件中添加多个事件后,我使用给定的代码在单个 ics 文件中更新多个事件。但它不起作用。事件不会更新。任何身体请帮助我。我的代码是给定的:

$ical = "BEGIN:VCALENDAR";    
$ical .= "'nVERSION:2.0";    
$ical .= "'nPRODID:-//hacksw/handcal//NONSGML v1.0//EN";    
$ical .= "'nMETHOD:REQUEST";    
$ical .= "'nCALSCALE:GREGORIAN";    
$ical .= "'nX-WR-RELCALID:asjh675adashdh";    
$ical .= "'nX-WR-CALNAME:My Nov Calendar";   
foreach($arr as $newArr){
    $ical .= "'nBEGIN:VEVENT";    
    $ical .= "'nUID:" . md5($newArr['stDate']) . "example.com";    
    $ical .= "'nSEQUENCE:1";    
    $ical .= "'nDTSTAMP:" . gmdate('Ymd');    
    $ical .= "'nORGANIZER:catalog@example.com";    
    $ical .= "'nDTSTART:".$newArr['stDate'];    
    $ical .= "'nDTEND:".$newArr['stDate'];    
    $ical .= "'nSUMMARY:".$newArr['sub'];    
    $ical .= "'nDESCRIPTION:".$newArr['desc'];    
    $ical .= "'nCLASS:PUBLIC";    
    $ical .= "'nSTATUS:CONFIRMED";    
    $ical .= "'nTRANSP:TRANSPARENT";    
    $ical .= "'nEND:VEVENT";    
}
$ical .= "'nEND:VCALENDAR";    
header('Content-type: text/calendar; charset=utf-8');    
header('Content-Disposition: inline; filename=my-calendar.ics');    
echo $ical;    
exit;

我也更改了序列号,但它不起作用。

每个事件中会更改什么属性?

UID 属性基于每个事件的 DTSTART。因此,如果您更改事件的开始,UID 也会更改。更新事件时,不得更改 UID。这是在事件的整个生命周期中应保持不变的一件事。

不知道gmdate('Ymd')到底做了什么,但DTSTAMP应该是YYYYMMDDTHHMMSSZ格式。

然后你在内容类型标头中缺少 METHOD=REQUEST 参数,但我认为这不会导致更新失败。