Erstellen und Exportieren von iCal-Dateien (.ics) mit Hilfe von PHP

Termin- oder Veranstaltungskalender sind schon lange keine Seltenheit mehr im Internet. Mit Hilfe von PHP können diese Termindaten auch als iCal-Datei (*.ics) auf Websites zum Download angeboten werden, ohne dass man von Hand eine solche Datei erstellen muss. Die Benutzer der Website können sich somit komfortabel diese Termine in ihren eigenen elektronischen Kalender importieren. In diesem Beitrag findet ihr das passende PHP-Snippet, um auch euren Benutzern ein iCal-Export zur Verfügung zu stellen.

Nur noch wenige Tage!

Frühbucher-Preise für unsere Seminare in Berlin: CSS – The Next Level, WordPress, SVG, Prototyping, Responsive Design für Konzepter, HTML & CSS, Muse …

Jetzt Tickets sichern!

Daten auslesen und in Variablen speichern

Um eure iCal-Datei mit den richtigen Daten zu füllen, erstellt ihr als erstes einige Variablen mit euren Daten. Diese werden später an das Skript übergeben. In diesem Beispiel handelt es sich um folgende Angaben:

  • Start des Termins (Datum und Zeitpunkt)
  • Ende des Termins (Datum und Zeitpunkt)
  • Erstellung des Termins (Datum und Zeitpunkt)
  • Titel der Veranstaltung
  • Veranstaltungsort
  • Beschreibung der Veranstaltung
  • Link zur Veranstaltung
  • Dateiname der iCal-Datei

Hierbei ist es wichtig, dass die Datums- und Zeitangaben im Format »YYYYMMDDTHHMMSS« vorliegt. Angaben wie der Titel, die Beschreibung und der Veranstaltungsort werden mit Hilfe von PHP so formatiert, dass sie später auch korrekt angezeigt werden. Der Dateiname sollte webfreundlich, d. h. ohne Sonderzeichen oder Leerzeichen angegeben werden.

$kb_start = '20161028T130000';
$kb_end = '20161028T143000';
$kb_current_time = '20161026T130000';
$kb_title = html_entity_decode('Titel des Termins', ENT_COMPAT, 'UTF-8');
$kb_location = preg_replace('/([\,;])/','\\\$1','Location');
$kb_description = html_entity_decode('Beschreibung zum Termin', ENT_COMPAT, 'UTF-8');
$kb_url = 'https://kulturbanause.de';
$kb_file_name = 'name-der-datei';

iCal-Datei erstellen

Das Erstellen der iCal-Datei funktioniert in drei Schritten. Als erstes wird die Datei mitels fopen() geöffnet, anschließend mittels fwrite() der Inhalt eingefügt und zuletzt die Datei mittels fclose() geschlossen. Das alles passiert, sobald jemand die Seite aufruft, auf der das folgende Code-Snippet eingebunden ist. Sobald ein zweiter Seitenaufruf stattfindet, wird diese Datei aktualisiert. Der Pfad eures Verzeichnisses muss im Code an die Stelle des Wortes »VERZEICHNIS« geschrieben werden. Sollte aus irgendeinem Grund (z. B. falsche Schreibrechte eures Verzeichnisses) die Datei nicht geöffnet werden können, bricht das Script ab und es erscheint der Satz »Datei kann nicht gespeichert werden!«.

<?php
$kb_ical = fopen('VERZEICHNIS/'.$kb_file_name.'.ics', 'w') or die('Datei kann nicht gespeichert werden!');

$kb_ics_content = '
BEGIN:VCALENDAR
VERSION:2.0
CALSCALE:GREGORIAN
BEGIN:VEVENT
DTSTART:'.$kb_start.'
DTEND:'.$kb_end.'
LOCATION:'.$kb_location.'
DTSTAMP:'.$kb_current_time.'
SUMMARY:'.$kb_title.'
URL;VALUE=URI:'.$kb_url.'
DESCRIPTION:'.$kb_description.'
END:VEVENT
END:VCALENDAR';
fwrite($kb_ical, $kb_ics_content);

fclose($kb_ical);
?>

Datei zum Download bereitstellen

Um die Datei nun zum Download anzubieten, könnt ihr einen ganz gewöhnlichen Link erstellen. Gebt hier ebenfalls den von euch gewählten Verzeichnispfad und den von euch gewählten Dateinamen an.

<a href="./VERZEICHNIS/<?php echo $kb_file_name; ?>.ics" title="»<?php echo $kb_title; ?>« exportieren">Termin in Kalender speichern</a>

Anpassung der .htaccess-Datei

Sollte euer Browser die Datei anzeigen anstatt den Download zu starten, müsst ihr gegebenenfalls eure .htaccess-Datei anpassen. Um sicher zu stellen, dass die von euch erstellte Datei als Download-Datei erkannt wird und nicht direkt im Browser geöffnet wird, schreibt folgende Zeile in eure .htaccess-Datei. Erstellt allerdings vorher unbedingt ein Backup der alten .htaccess, da Fehler in dieser Datei die Website beschädigen können.

AddType text/calendar .ics

Live-Beispiel

Das folgende Live-Beispiel zeigt die o.g. Funktionalität. Per Klick ladet ihr eine *.ics-Datei herunter, die ein Event des heutigen Tages beinhaltet.

Beispiel anschauen