J'ai construit un site en PHP 5 et MySQL avec une table qui garde la trace des séances de photos prévues. Je veux pousser un flux de ces "événements" programmés dans un fichier ical. J'ai d'abord asked this question et j'ai obtenu une bonne réponse de S. Gehrig. J'ai un exemple de fichier ical qui fonctionne et qui se met régulièrement à jour dans Google Agenda chaque fois que j'ai ajusté manuellement le fichier dans Dreamweaver. Cependant, maintenant que j'ai ajouté PHP tirant de la base de données, cela ne fonctionnera pas.Dynamique ical créé à partir de la base de données ne fonctionne pas
Voici le 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;
?>
La sortie de ce fichier est exactement le même que le manuel, la version codée en dur que je travaille, pour autant que je peux dire. Quelqu'un peut-il voir pourquoi cela ne fonctionne pas ????
PS Voici le code du fichier qui fonctionne - Je l'ai juste posté sur mon serveur et je suis abonné via l'URL dans Google Agenda. Lorsque j'ai codé en dur dans le deuxième événement, il est apparu sous peu dans Google Agenda.
<?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;
?>
AIDE!
Un commentateur m'a suggéré de tester en supprimant les en-têtes et en faisant écho à la variable $ ical. Voici les résultats de ce test, avec des sauts de ligne ajoutés pour votre commodité:
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
Merci!
Dans Google Agenda, j'obtiens une erreur avec un titre de "Paramètres d'erreur" et du texte: "Nous n'avons pas pu analyser le calendrier à l'URL demandée." – rhodesjason
Entourage ne l'ouvrira pas du tout, et iCal dit, "Ce fichier de calendrier est illisible Aucun événement n'a été ajouté à votre calendrier iCal." – rhodesjason