rho*_*son 103 php icalendar calendar
任何关于PHP的Google搜索都会显示phpicalendar以及如何解析或读取IN文件.我只想写一个PHP文件,从我的数据库中提取事件并以ical格式写出来.
我的问题是我找不到任何可以回答两个问题的地方:
任何帮助你们都可以给予或指出我将不胜感激!
Ste*_*rig 124
如果Google日历不需要*.ics
-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;
Run Code Online (Sandbox Code Playgroud)
这基本上只需要让客户认为您正在提供iCalendar文件,即使可能存在一些与缓存,文本编码等有关的问题.但是你可以开始尝试这个简单的代码.
小智 16
除了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;
Run Code Online (Sandbox Code Playgroud)
这阻止了我的解析错误并使我的ICS文件正确验证.
有一个优秀的eluceo/ical包,可以让您轻松创建ics文件.
以下是docs的示例用法:
// 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();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
95361 次 |
最近记录: |