Export MySQL table to iCalendar (.ICS) using PHP
Course- PHP Tutorial >
What is .ICS File
The iCalendar (.ICS) file format is universal calendar format used to store calendar information within a text file. It helps users to publish and share calendar information, meeting requests and tasks to other Internet users via email or website.
How to open .ICS File
.ICS files can open with Microsoft's Outlook, Apple's iCalendar, IBM Lotus Notes and Google Calendar etc.
How to export MySql data to .ICS File
Lets write a simple php program to export data from MySql table to ICS file.
PHP Code
<?php include("includes/connection.php"); # Select Database $sql = mysql_query( "SELECT * FROM events"); $ics_data = "BEGIN:VCALENDAR\n"; $ics_data .= "VERSION:2.0\n"; $ics_data .= "PRODID:PHP\n"; $ics_data .= "METHOD:PUBLISH\n"; $ics_data .= "X-WR-CALNAME:Schedule\n"; # Change the timezone if needed $ics_data .= "X-WR-TIMEZONE:Asia/Kolkata\n"; $ics_data .= "BEGIN:VTIMEZONE\n"; $ics_data .= "TZID:Asia/Kolkata\n"; $ics_data .= "BEGIN:DAYLIGHT\n"; $ics_data .= "TZOFFSETFROM:-0500\n"; $ics_data .= "TZOFFSETTO:-0400\n"; $ics_data .= "DTSTART:1403086496\n"; $ics_data .= "RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU\n"; $ics_data .= "TZNAME:EDT\n"; $ics_data .= "END:DAYLIGHT\n"; $ics_data .= "BEGIN:STANDARD\n"; $ics_data .= "TZOFFSETFROM:-0400\n"; $ics_data .= "TZOFFSETTO:-0500\n"; $ics_data .= "DTSTART:1403086496\n"; $ics_data .= "RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU\n"; $ics_data .= "TZNAME:EST\n"; $ics_data .= "END:STANDARD\n"; $ics_data .= "END:VTIMEZONE\n"; while ($event_details = mysql_fetch_assoc($sql)) { $id = $event_details['ID']; $start_date = $event_details['StartDate']; $start_time = $event_details['StartTime']; $end_date = $event_details['EndDate']; $end_time = $event_details['EndTime']; $name = $event_details['Title']; $location = $event_details['Location']; $description = $event_details['Description']; # Replace HTML tags $search = array("/<br>/","/&/","/→/","/←/","/,/","/;/"); $replace = array("\\n","&","-->","<--","\\,","\\;"); $name = preg_replace($search, $replace, $name); $location = preg_replace($search, $replace, $location); $description = preg_replace($search, $replace, $description); # Change TimeZone if needed $ics_data .= "BEGIN:VEVENT\n"; $ics_data .= "DTSTART;TZID=Asia/Kolkata:".$start_date."T".$start_time."\n"; $ics_data .= "DTEND:" . $end_date . "T" . $end_time . "\n"; $ics_data .= "DTSTAMP:" . date('Ymd') . "T" . date('His') . "Z\n"; $ics_data .= "LOCATION:" . $location . "\n"; $ics_data .= "DESCRIPTION:" . $description . "\n"; $ics_data .= "SUMMARY:" . $name . "\n"; $ics_data .= "UID:" . $id . "\n"; $ics_data .= "SEQUENCE:0\n"; $ics_data .= "END:VEVENT\n"; } $ics_data .= "END:VCALENDAR\n"; # Download the File $filename = "event_calendar.ics"; header("Content-type:text/calendar"); header("Content-Disposition: attachment; filename=$filename"); echo $ics_data; exit; ?>
connection.php file
<?php $host="localhost";// Your Host name $uname="******"; // Your Database User name $pass="*******"; // Your Database password $database = "********"; // Your Database name $connection=mysql_connect($host,$uname,$pass) or die("Database Connection Failed"); $selectdb=mysql_select_db($database) or die("Database could not be selected"); $result=mysql_select_db($database) or die("database cannot be selected <br>"); ?>