Ich baute eine Website in PHP 5 und MySQL mit einer Tabelle, die geplante Fotoshootings verfolgt. Ich möchte einen Feed dieser geplanten "Ereignisse" in eine ical-Datei ausgeben.Dynamic ical erstellt von Datenbank funktioniert nicht
Ich ursprünglich asked this question und bekam eine gute Antwort von S. Gehrig. Ich habe eine Beispieldatei erhalten, die regelmäßig funktioniert, und regelmäßig in Google Kalender aktualisiert, wenn ich die Datei in Dreamweaver manuell angepasst habe. Jetzt, da ich dynamisches PHP hinzugefügt habe, das aus der Datenbank zieht, wird es nicht funktionieren.
Hier ist der PHP:
<?php
require_once('../../_includes/initialize.php');
$ical = " BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN ";
$slots = Slot::find_all();
foreach($slots as $slot) {
$job = Job::find_by_id($slot->job_id);
$start_stamp = strtotime($slot->start);
$end_stamp = strtotime($slot->endtime);
$dtstart = gmdate('Ymd', $start_stamp).'T'. gmdate('His', $start_stamp) . "Z"; // converts to UTC time
$dtend = gmdate('Ymd', $end_stamp).'T'. gmdate('His', $end_stamp) . "Z"; // converts to UTC time
$summary = $job->title;
$ical .= " BEGIN:VEVENT
UID:" . $slot->id . "@homewoodphoto.jhu.edu
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:" . $dtstart . "
DTEND:" . $dtend . "
SUMMARY:" . $summary . "
END:VEVENT ";
}
$ical .= " END:VCALENDAR";
//set correct content-type-header
header('Content-type: text/calendar; charset=utf-8');
header('Content-Disposition: inline; filename=homewoodphoto_master.ics');
echo $ical;
exit;
?>
Die Ausgabe dieser Datei ist genau das gleiche wie das Handbuch, hartcodierte Version, die ich arbeiten, soweit ich das beurteilen kann. Kann jemand sehen, warum das nicht funktioniert ????
PS Hier ist der Code der Datei, die funktioniert - ich habe es gerade auf meinem Server veröffentlicht und per URL in Google Kalender abonniert. Als ich in der zweiten Veranstaltung fest codierte, tauchte sie in Google Calendar auf.
<?php
$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:20090925T170000Z
DTEND:20090928T035959Z
SUMMARY:Bastille Day Party
END:VEVENT
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)); . "@yourhost.test
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:20090929T170000Z
DTEND:20090930T035959Z
SUMMARY:Camping Trip
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;
?>
HILFE!
Ein Kommentator vorgeschlagen, ich testen, indem Sie die Header entfernen und die $ ical var widerspiegeln. Hier sind die Ergebnisse dieses Tests, mit Zeilenumbrüchen für Ihre Bequemlichkeit hinzugefügt:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//hacksw/handcal//NONSGML v1.0//EN
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20090929T212141Z
DTSTART:20091001T230000Z
DTEND:20091001T230000Z
SUMMARY:little title
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20090929T212141Z
DTSTART:20090926T230000Z
DTEND:20090927T010000Z
SUMMARY:A big photo shoot
END:VEVENT
BEGIN:VEVENT
UID:[email protected]
DTSTAMP:20090929T212141Z
DTSTART:20091003T230000Z
DTEND:20091004T010000Z
SUMMARY:A big photo shoot
END:VEVENT
END:VCALENDAR
Vielen Dank!
In Google Kalender erhalte ich eine Fehlermeldung mit dem Titel "Einstellungsfehler" und dem Text: "Wir konnten den Kalender nicht nach der angeforderten URL analysieren." – rhodesjason
Entourage wird es überhaupt nicht öffnen, und iCal sagt: "Diese Kalenderdatei ist nicht lesbar. Dem iCal-Kalender wurden keine Ereignisse hinzugefügt." – rhodesjason