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

iCal bzw. iCalendar ist ein standardisiertes Dateiformat zum Austausch von Kalendereinträgen. Der Standard ist in RFC 5545 definiert. Dateien dieses Formats werden beispielsweise verwendet, wenn eine Person andere Personen zu einem Termin einlädt. In der Regel erhalten die Eingeladenen dann eine E-Mail mit einer .ics-Datei. Diese Datei enthält alle relevanten Informationen zum Termin und kann in gängige Kalenderprogramme importiert werden.

Der iCalendar-Standard ermöglicht den plattformübergreifenden Austausch solcher Kalenderinformationen und wird von allen etablierten Anbietern wie Google, Microsoft, Apple, Open-Xchange und vielen weiteren unterstützt.

Da wir bei var-lab IT regelmäßig Webanwendungen mit Termin-Funktionalität umsetzen, gehört das Erstellen solcher iCal-Dateien zu unserem Alltag. Dafür stehen verschiedene Komponenten und Bibliotheken zur Verfügung. Eine davon ist die iCal-Komponente elucheo/ical, die über rund zehn Jahre als Open-Source-Projekt auf GitHub gepflegt wurde und in zahlreichen Anwendungen zum Einsatz kam.

Die Entwicklung der Bibliothek scheint jedoch seit einiger Zeit eingestellt worden zu sein. Aus diesem Grund haben wir einen Fork erstellt und führen die Weiterentwicklung eigenständig fort. Dabei greifen wir auch einige der offenen Issues auf GitHub auf und implementieren zusätzliche Funktionen. Unter anderem haben wir bereits mehrere Refactorings vorgenommen, um vollständige Kompatibilität mit PHP 8.4 sicherzustellen.

Installation

Das Paket kann mit folgendem Befehl über Composer installiert werden:

composer require opencal/ical

Beispiel: Verwendung

Das folgende Beispiel zeigt, wie mit opencal/iCal ein einfacher Kalendereintrag erstellt und als .ics-Datei ausgegeben werden kann.

<?php

require_once __DIR__ . '/../vendor/autoload.php';

// 1. Erstellen eines Event-Domain-Objekts
$event = (new OpenCal\iCal\Domain\Entity\Event())
    ->setSummary('Heiligabend')
    ->setDescription('Lorem Ipsum Dolor...')
    ->setOccurrence(
        new OpenCal\iCal\Domain\ValueObject\SingleDay(
            new OpenCal\iCal\Domain\ValueObject\Date(
                \DateTimeImmutable::createFromFormat('Y-m-d', '2030-12-24')
            )
        )
    );

// 2. Erstellen eines Kalender-Domain-Objekts
$calendar = new OpenCal\iCal\Domain\Entity\Calendar([$event]);

// 3. Transformation in ein iCalendar-Komponentenobjekt
$componentFactory = new OpenCal\iCal\Presentation\Factory\CalendarFactory();
$calendarComponent = $componentFactory->createCalendar($calendar);

// 4. Header setzen
header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="cal.ics"');

// 5. Ausgabe der iCal-Datei
echo $calendarComponent;

Weitere Beispiele sind examples/-Verzeichnis im Repository zu finden.

Newsletter abonnieren

Sie erhalten einmal im Monat interessante News über var-lab IT und unsere Arbeit an Open-Source.

Veröffentlicht am 02.07.2025