2012-09-10 8 views
1

Je crée un événement/rendez-vous de calendrier ics en PHP. Après avoir créé l'événement, il est mis à disposition pour le téléchargement et l'importation par lien hypertexte:Importer un événement * .ics/Calendar dans un calendrier blackberry

 $icsFilename=sprintf("calTruthUniversal%dFile.ics",$randNum); 

    $fp = fopen($icsFilename, 'w'); 
    fwrite($fp, 'BEGIN:VCALENDAR'."\r\n"); 
    fwrite($fp, "PRODID:-//Truth Universal, LLC//Truth Universal Calendar 70.9054//EN\r\n"); 
    fwrite($fp, "VERSION:2.0\r\n"); 
    fwrite($fp, "CALSCALE:GREGORIAN\r\n"); 
    fwrite($fp, "METHOD:REQUEST\r\n"); 
    fwrite($fp, "BEGIN:VEVENT\r\n"); 
    fwrite($fp, "DTSTART:".$dtstart."\r\n"); 
    fwrite($fp, "DTEND:".$dtend."\r\n"); 
    fwrite($fp, "ORGANIZER;[email protected]:mailto:[email protected]\r\n"); 
    fwrite($fp, "DESCRIPTION:".$description."\r\n"); 
    fwrite($fp, "LOCATION:".$c_address."\r\n"); 
    fwrite($fp, "SUMMARY:".$c_event."\r\n"); 
    fwrite($fp, "END:VEVENT\r\n"); 
    fwrite($fp, "END:VCALENDAR\r\n"); 
    fclose($fp); 
     //echo "<br>"; 
     //echo "<hr>"; 

    echo"<a href=\"download.php?icsFile=".$icsFilename."\"><img src=\"../images/icon_cal.png\" border=\"0\"></a><br><br>"; 

Le script download.php définit les en-têtes/type de contenu et les flux du fichier à télécharger:

 <?php 

     $myFile = $_GET['icsFile']; 

     $size=filesize($myFile); 

     header("Content-Type: text/calendar; charset=utf-8"); 
     header("Content-Disposition: attachement; filename=".$myFile); 
     header("Content-Length: ".$size); 
     header("Content-Transfer-Encoding: binary"); 

     $fh = @fopen($myFile, 'rb'); 
     $theData = fread($fh, $size); 
     fclose($fh); 

     echo $theData; 
     ?> 

Lorsque la Le fichier ics est téléchargé via un lien hypertexte sur les téléphones iPhone et Android, il est importé dans les calendriers des téléphones. Blackberry cependant, ne fait pas ça. Il télécharge le fichier, mais seulement après avoir affiché cette alerte: "L'article que vous avez sélectionné ne peut pas être affiché. Voulez-vous enregistrer l'article?" Il n'importe pas le fichier dans le calendrier.

J'ai même expérimenté en changeant le Content-Type à "application/x-rimcalendarevent" mais en vain.

Est-ce que quelqu'un a une solution?!?

Frustré,

Ujasiri

+0

Code sympa. J'aime particulièrement comment vous permettez à un utilisateur malveillant de voler le fichier ** N'IMPORTE QUEL ** sur votre serveur pour lequel il connaît le nom du chemin. J'espère que vous aimez votre fichier '/ etc/passwd' qui flotte autour des interwebitubes. –

+3

@MarcB De quoi parlez-vous? Avez-vous mon fichier/etc/passwd? Est-ce ainsi que vous avez obtenu votre réputation, en étant un snob de code? Je ne vous ai pas demandé de critiquer le code. Si vous n'avez pas la réponse, ne perdez pas mon temps. –

+0

Non, mais je dis que si vous mettez ce code en production, les utilisateurs distants peuvent l'utiliser pour télécharger n'importe quel fichier sur votre serveur. Considérez cela comme un avertissement que vous écrivez un code très peu sécurisé. –

Répondre

0


J'ai eu le même problème.
Ce que j'ai fait, c'est que j'ai généré un événement avec blackberry et que je l'ai renvoyé. De cette façon, j'avais un fichier "correct". J'ai trouvé plusieurs différences, mais celle qui a résolu le problème était la fin du fichier. J'ai dû ajouter deux ou trois lignes vides à la fin du fichier ics.

Quelque chose comme:

fwrite($fp, "END:VCALENDAR\r\n"); 
fwrite($fp, "\r\n\r\n\r\n"); 
fclose(4fp); 

travaillé pour moi.

Bonne chance!

Questions connexes