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

时间:2013-11-13 08:45:47

标签: php icalendar

在单个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;

我也更改了SEQUENCE号码,但它无效。

1 个答案:

答案 0 :(得分:0)

每项活动会改变什么属性?

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

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

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