1

PHPでicsカレンダーイベント/予定を作成しています。イベントを作成すると、ハイパーリンクを介してダウンロードおよびインポートできるようになります。

     $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;CN=truthuniversal@yahoo.com:mailto:truthuniversal@yahoo.com\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>";

スクリプト download.php は、ヘッダー/コンテンツ タイプを設定し、ダウンロードするファイルをストリーミングします。

      <?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;
      ?>

iPhone および Android フォンでハイパーリンクを介して ics ファイルをダウンロードすると、携帯電話のカレンダーにインポートされます。ただし、Blackberry はこれを行いません。ファイルをダウンロードしますが、「選択したアイテムを表示できません。アイテムを保存しますか?」という警告が表示された後でのみです。ファイルをカレンダーにインポートしていません。

Content-Type を「application/x-rimcalendarevent」に変更して実験しましたが、役に立ちませんでした。

誰かが解決策を持っていますか?!?

欲求不満,

ウジャシリ

4

1 に答える 1

0


私も同じ問題を抱えていました。
私がしたことは、ブラックベリーでイベントを生成し、それを私に送り返したことです。このようにして、「正しい」ファイルができました。いくつかの違いが見つかりましたが、問題を解決したのはファイルの終わりでした。ics ファイルの末尾に 2 ~ 3 行の空行を追加する必要がありました。

何かのようなもの:

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

私のために働いた。

幸運を!

于 2012-09-26T09:55:17.350 に答える