任何谷歌上搜索PHP ical仅仅是带来了phpicalendar和如何分析或者在阅读ical文件。我只想写一个PHP文件,拉事件从我的数据库,并将它们写出ical格式。

我的问题是,我找不到任何地方,将回答两个问题:

  1. 什么是的 确切的 ical格式,包括标题、文件格式脚注,等等?换句话说,是什么的文件必须有的,没错,才能正确地阅读在谷歌的日历,等等?
  2. 如果我建立的这一文件使用。php扩展,如何做的,我发布它作为ical?我必须要写入一个新的。ics的文件?或者将日历等。读。php文件作为ical只要的内容是正确的格式?(很像style.css.php 文件将被解读为一个CSS文件,如果内容实际上是CSS,等等。)

任何帮助你所有可以得到或点我将不胜感激!!!

有帮助吗?

解决方案

这应该是非常简单,如果日历中不需要 *.ics-扩展(这将需要一些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;

这基本上所有你需要让一个客户认为你在提供一iCalendar文件,尽管可能有一些问题,就缓存文本编码等。但你可以开始尝试用这个简单的代码。

其他提示

注意到个人的经验,另外两斯特凡*格里克的答复和戴夫没有的答复(和mmmshuddup的答复):

我有验证问题同时使用 和PHP_EOL当我用ICS验证程序是在 http://severinghaus.org/projects/icv/

我知道我不得不使用 为了得到它的正确验证,所以这是我的解决方案:

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;

这停止,我的分析错误,使我ICS文件,验证正确。

有一个很好的 eluceo/ical 包,让你轻松创建ics文件。

这里的一个例子是使用从文档:

// 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();

也许有点晚了,但这里的一个链接到的实际规范。 http://tools.ietf.org/html/rfc55451

http://www.kanzaki.com/docs/ical/ 有一个稍微更加易读版本较老的规范。它有助于作为一个起点-很多事情仍然相同。

还在 我的网站, 我们

  1. 一些名单的可用资源(见右侧栏)在
    • ical规范RFC5545
    • ical测试资源
  2. 一些注意事项 记在我的旅途的工作 .ics 在过去的几年。特别是,你可以找到这个 重复事件的速记' 是有用的。

.ics 区域,需要谨慎处理:

  • '全天的活动
  • 类型的日期(时区,UTC,或者当地的"流动")注意到理解的区分
  • 互操作性的复发的规则
  1. 确切ical格式: http://www.ietf.org/rfc/rfc2445.txt
  2. 根据该规范,已结束。ics

编辑:实际上我不确定行6186提供了一个例子。ics命名的格式,但它还说你可以使用网址的参数。我不认为它的事项,只要本类型是正确的。

编辑:例从维基百科: http://en.wikipedia.org/wiki/ICalendar

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
DTSTART:19970714T170000Z
DTEND:19970715T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
END:VCALENDAR

MIME类型配置在服务器上。

确保你的格式串这样的或者它不会工作

 $content = "BEGIN:VCALENDAR\n".
            "VERSION:2.0\n".
            "PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n".
            "BEGIN:VEVENT\n".
            "UID:".uniqid()."\n".
            "DTSTAMP:".$time."\n".
            "DTSTART:".$time."\n".
            "DTEND:".$time."\n".
            "SUMMARY:".$summary."\n".
            "END:VEVENT\n".
            "END:VCALENDAR";
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top