programing

PHP를 사용하여 Google 캘린더에서 읽을 ical 파일을 동적으로 게시하려면 어떻게 해야 합니까?

sourcejob 2022. 11. 23. 20:18
반응형

PHP를 사용하여 Google 캘린더에서 읽을 ical 파일을 동적으로 게시하려면 어떻게 해야 합니까?

PHP ical에 대한 구글 검색은 phpicalendar와 IN ical 파일을 해석하거나 읽는 방법을 불러옵니다.데이터베이스에서 이벤트를 가져와 ical 형식으로 쓰는 PHP 파일을 쓰고 싶습니다.

문제는 다음 두 가지 질문에 대한 답을 찾을 수 없다는 것입니다.

  1. 헤더, 파일 형식, 바닥글 등을 포함한 정확한 ical 형식은 무엇입니까?즉, Google 캘린더 등에 의해 올바르게 읽히기 위해서는 파일이 정확히 무엇을 가지고 있어야 합니까?
  2. 확장자 .php를 사용하여 이 파일을 작성하는 경우 ical로 게시하려면 어떻게 해야 합니까?새로운 .ics 파일에 써야 하나요?아니면, Google 캘린더 등은 컨텐츠의 형식이 올바른 한 .php 파일을 ical로 읽습니까?(실제로 내용이 CSS 등인 경우 style.css.php 파일과 거의 같은 파일이 CSS 파일로 읽힙니다.)

여러분들의 도움이나 지시가 있으면 감사하겠습니다!!!

구글 캘린더가 다음을 필요로 하지 않는 경우 이는 매우 간단해야 합니다.*.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;

캐싱, 텍스트 인코딩 등에 문제가 있을 수 있지만 기본적으로는 iCalendar 파일을 사용하고 있다고 클라이언트로 하여금 생각하게 하기 위해 필요한 것은 이것뿐입니다.하지만 이 간단한 코드로 실험을 시작할 수 있습니다.

스테판 게릭의 답변과 데이브 노니의 답변(그리고 음슈둡의 답변) 외에 개인적인 경험의 메모:

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;

이로 인해 해석 오류가 중지되고 ICS 파일이 올바르게 검증되었습니다.

ics 파일을 쉽게 만들 수 있는 뛰어난 eluceo/ical 패키지가 있습니다.

다음은 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();

조금 늦었을지도 모르지만, 여기 실제 사양에 대한 링크가 있습니다.https://www.rfc-editor.org/rfc/rfc5545[1]

http://www.kanzaki.com/docs/ical/에는 오래된 사양의 읽기 쉬운 버전이 있습니다.그것은 출발점으로 도움이 된다 - 많은 것들이 여전히 똑같다.

제 사이트에도

  1. 유용한 리소스 목록(오른쪽 아래 사이드바 참조)
    • ical 사양 RFC 5545
    • 테스트 리소스
  2. 여정에서 녹음된 메모는.ics지난 몇 년 동안요특히 이 반복 이벤트 '치트시트'가 유용할 수 있습니다.

.ics「 」 「 」 、 「 」 、 「 」

  • '하루 종일' 이벤트
  • 날짜 유형(시간대, UTC 또는 로컬 '부동') - 구별을 이해하기 위해 nb
  • 반복 규칙의 상호 운용성
  1. 정확한 ical 형식: http://www.ietf.org/rfc/rfc2445.txt
  2. 사양에 따르면 .ics로 끝나야 합니다.

편집: 사실 확실하지 않습니다. 6186행은 .ics 명명 형식의 예를 제시하지만 URL 매개 변수를 사용할 수 있음을 나타냅니다.MIME 타입만 맞으면 상관없을 것 같아요.

편집: Wikipedia의 예: 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";

언급URL : https://stackoverflow.com/questions/1463480/how-can-i-use-php-to-dynamically-publish-an-ical-file-to-be-read-by-google-calen

반응형