Any Google search on PHP ical just brings up phpicalendar and how to parse or read IN ical files. I just want to write a PHP file that pulls events from my database and writes them out in ical format.
My problem is I can't find anywhere that will answer two questions:
Any help you all can give or point me to will be greatly appreciated!!!
Go to Settings > Sharing > Create Link. Label the link accordingly (e.g., 'Selected Sub-calendars for iCalendar Feed' or whatever is appropriate.)
This should be very simple if Google Calendar does not require the *.ics
-extension (which will require some URL rewriting in the server).
$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;
That's essentially all you need to make a client think that you're serving a iCalendar file, even though there might be some issues regarding caching, text encoding and so on. But you can start experimenting with this simple code.
A note of personal experience in addition to both Stefan Gehrig's answer and Dave None's answer (and mmmshuddup's reply):
I was having validation problems using both \n and PHP_EOL when I used the ICS validator at http://severinghaus.org/projects/icv/
I learned I had to use \r\n in order to get it to validate properly, so this was my solution:
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;
That stopped my parse errors and made my ICS files validate properly.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With