为什么我的PHP生成的.ICS文件在文本编辑器中打开?

时间:2017-08-21 14:12:25

标签: php icalendar

我使用PHP生成并将.ICS文件保存到服务器,然后将其作为附件附加到电子邮件并发送给用户。

生成.ICS文件的代码(由于它是更大的对象的一部分而缺少一些上下文,但是它的要点):

public function ics() {
    $ical = "BEGIN:VCALENDAR\n" .
        "VERSION:2.0\n" .
        "CALSCALE:GREGORIAN\n" .
        "PRODID:-//hacksw/handcal//NONSGML v1.0//EN\n" .
        "BEGIN:VEVENT\n" .
        "UID:" . md5(uniqid(mt_rand(), true)) . "\n" .
        "DTSTAMP:" . gmdate('Ymd') . 'T' . gmdate('His') . "\n" .
        "DTSTART:" . CrRequest::dateToCal(strtotime($this->cdate . " " . $this->start_time)) . "\n" .
        "DTEND:" . CrRequest::dateToCal(strtotime($this->cdate . " " . $this->end_time)) . "\n" .
        "SUMMARY:" . $this->location . "\n" .
        "END:VEVENT\n" .
        "END:VCALENDAR\n";

    $name = 'i' . $this->id . 'send.ics';
    file_put_contents(self::$icslocation . $name, $ical);
    return $name;
}

正在生成的文本示例:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
CALSCALE:GREGORIAN
BEGIN:VEVENT
SUMMARY:<summary>
LOCATION:<location>
DTSTART:20170824T070000
DTEND:20170824T104500
DESCRIPTION:
END:VEVENT
END:VCALENDAR

我收到的投诉是.ICS文件在纯文本编辑器中打开。我的直觉反应是说我无能为力 - 用户需要配置他们的系统以在正确的应用程序中打开.ICS文件。但是, am 我在文件创建中遗漏了什么?这是必须在用户端处理的那些不幸的问题之一,还是我可以在这里做一些额外的事情来指导他们的系统在电子邮件应用程序中打开它?

1 个答案:

答案 0 :(得分:0)

这取决于用户浏览器的设置,如何处理文件类型,是的,因为Rob建议文件类型将由mime类型确定,因此仅创建包含ics数据的文本文件是不够的。它必须有一个mime类型的文本/日历&#39;并且必须将用户的浏览器设置为打开他们使用的任何日历应用程序。