2013-01-05 64 views
4

我已經通過我的php腳本生成了一個ics文件,該文件允許我在Safari(6.0.2)中下載.ics文件,但是在Chrome(23.0 .1271.101)和Firefox(17.0.1)我收到一條錯誤消息:無法在Chrome或Firefox中下載生成的.ics文件

錯誤6(net :: ERR_FILE_NOT_FOUND):無法找到文件或目錄。

.ics文件是有效的(用兩個單獨的源檢查),我可以在iCal中打開它。我在這個論壇和其他許多論壇上都遵循了腳本和提示。

這是生成的.ics文件中的代碼:

 $tz_sthlm = new DateTimeZone('Europe/Stockholm'); 
     $tz_utc = new DateTimeZone('UTC'); 
     $dateEvent = new DateTime($event->datetime, $tz_sthlm); 
     $dateEvent->setTimezone($tz_utc); 

     $filename = str_replace('/', '-', $event->webblink); 

     $output = ''; 

     $output .= 'BEGIN:VCALENDAR' . "\r\n"; 
     $output .= 'VERSION:2.0' . "\r\n"; 
     $output .= 'PRODID:-//Medicinska Foreningen Orebro//Biljettbokning//SV-SE' . "\r\n"; 
     $output .= 'METHOD:PUBLISH' . "\r\n"; 
     $output .= 'BEGIN:VEVENT' . "\r\n"; 
     $output .= 'CLASS:PUBLIC' . "\r\n"; 
     $output .= 'CREATED:' . date('Ymd\THis') . "\r\n"; 

     $description = strip_tags(htmlspecialchars_decode($event->description)); 
     $description = str_replace(array("\n", ';'), array('\n', '\;'), $description); 

     $output .= 'DESCRIPTION:' . $description . "\r\n"; 
     $output .= 'DTSTART:' . $dateEvent->format('Ymd\THis\Z') . "\r\n"; 
     $dateEvent->modify('+4 hour'); 
     $output .= 'DTEND:' . $dateEvent->format('Ymd\THis\Z') . "\r\n"; 
     $output .= 'DTSTAMP:' . $dateEvent->format('Ymd\THis\Z') . "\r\n"; 
     $output .= 'LAST-MODIFIED:' . date('Ymd\THis') . "\r\n"; 
     $output .= 'LOCATION:' . $event->location . "\r\n"; 
     $output .= 'UID:' . $dateEvent->format('Ymd\THis') . '-' . md5($event->title) . '@' . $_SERVER['SERVER_NAME'] . "\r\n"; 
     $output .= 'END:VEVENT' . "\r\n"; 
     $output .= 'END:VCALENDAR'; 

     header("Content-Type: text/Calendar;charset=utf-8"); 
     header('Content-Disposition: inline; filename="' . $filename . '.ics"'); 
/*  header('Content-Transfer-Encoding: binary'); 
     header('Expires: -1'); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header('Pragma: public'); 
     header('Content-Length: ' . mb_strlen($output, '8bit')); 
    */ 
     echo $output; 
     exit; 

這是輸出

BEGIN:VCALENDAR 
VERSION:2.0 
PRODID:-//My Company//SV-SE 
METHOD:PUBLISH 
BEGIN:VEVENT 
CLASS:PUBLIC 
CREATED:20130105T000547 
DESCRIPTION:This is my description. 
DTSTART:20130124T170000Z 
DTEND:20130124T210000Z 
DTSTAMP:20130124T210000Z 
LAST-MODIFIED:20130105T000547 
LOCATION:Top secret 
UID:[email protected] 
END:VEVENT 
END:VCALENDAR 

在Chrome和Firefox任何想法,爲什麼我得到與錯誤訊息?

提前

+0

你試過'內容處置:attachment',而不是'inline'?這就是'header'的PHP文檔所暗示的,我從來沒有讀過頭文件規範。 – zneak

+0

閱讀[RFC 2183](http://www.ietf.org/rfc/rfc2183.txt),它看起來像Content-Disposition在HTTP上下文中沒有多大意義。不過,我認爲''attachment''比'inline'更有意義,因爲您希望強制下載。這就是說,我不能說這是否真的是你現在的問題。我沒有在這臺機器上測試PHP。 – zneak

+0

不幸的是,'attachment'沒有任何區別。還是一樣的錯誤。 – wally

回答

3

由於文件非常感謝派遣一個404頭狀態嘗試把這個頭:

header('HTTP/1.0 200 OK', true, 200); 
+1

工作正常!謝謝! – wally

相關問題