看標題可能看不懂我在說什麼,來看看圖吧!
以下範例自動產生 Excel 檔案,並使瀏覽器以下載方式提示使用者,而非在IE中開啟Excel表單。
在 IE 中出現提示畫面:
這時選擇「開啟」,由 Excel 打開這份文件,結果卻是...
(看不清楚可點圖放大)
測試用的原始碼如下:
$price_list .= "$brand_name\t$class_name\t$product_model\t$product_price\n"; header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=pricelist.xls"); header("Pragma: no-cache"); header("Expires: 0"); echo $price_header."\n".$price_list;
這個發生的原因在於 output buffer 跟 Internet Explorer 暫存檔產生的時間差所造成了,這時只要利用 PHP 的 output buffer 函數來自訂產生檔案的時機即可。
ob_start(); $price_list .= "$brand_name\t$class_name\t$product_model\t$product_price\n"; header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=pricelist.xls"); header("Pragma: no-cache"); header("Expires: 0"); echo $price_header."\n".$price_list; ob_flush();
修改過後結果就正常了。
你好, 剛好最近程式有用到類似功能 我希望文件能被下載而不是直接開啟 能請教是哪裡出錯了嗎?
某一段PHP <a href='../images/pdf/downloadpdf.php?pdf_file=test.pdf' target='_blank'>。。。</a>
downloadpdf.php之內容 <? header("Content-Disposition: attachment; filename=$pdf_file;"); ?>
但是下載之檔案卻是空的, 我懷疑是路徑的問題, 但是卻不知道問題出在哪裡(test.pdf與downloadpdf.php是同一路徑) 如果不經由下載而直接開啟就沒問題 <a href='../images/pdf/test.pdf' target='_blank'>。。。</a> 困擾好久了, 感謝賜教
請參考這一篇: http://www.neo.com.tw/archives/000112.html
你好~ 我的header是這樣寫的... set_time_limit(0); ob_start(); header("Content-disposition: filename=test.csv"); header("Content-type: application/octetstream"); header("Pragma: no-cache"); header("Expires: 0"); 之前寫的程式可以下載,這之程式不知道為什麼就是一直說「無法下載」,把header蓋掉的話,資料是可以直接印出來的,麻煩你了@@給個意見吧 ><""
打以下的header 移走 header("Pragma: no-cache"); header("Expires: 0");
綜合各家所長, 我整理出來的 PHP 萬用下載 SCRIPT
//For IE 5.5 設定用 if(ini_get('zlib.output_compression')) ini_set('zlib.output_compression', 'Off');
header("Content-Type: application/octetstream; name=$FILEname"); //for IE & Opera
header("Content-Type: application/octet-stream; name=$FILEname"); //for the rest
header("Content-Disposition: attachment; filename=$FILEname;"); header("Content-Transfer-Encoding: binary"); header("Cache-Control: cache, must-revalidate"); header("Pragma: public"); header("Expires: 0");
Alex: 謝謝你的補充喔!^^
感謝 Alex 的無私奉獻與指教, 的確使得!
加上了ob_start(); ob_flush(); 还是错误!
我用的是asp.net 遇到相同的問題 卻無法用BufferOutput解決 有人解決過嗎
加了 ob_start(); ob_flush(); 還是有無法直接開啟的問題, 用了: header("Cache-Control: cache, must-revalidate"); 就可以了, thx
this my php file : session_start(); $pschk = $_POST['pschk']; $subroot = $_POST['subroot']; $filen = $_POST['filen']; $ofile = $_POST['ofile']; $tcode = $_POST['tcode']; $qaz = $_POST['qaz']; $qaz = $_POST['qaz']; $wsx = $_POST['wsx']; $edc = $_POST['edc']; $rfv = $_POST['rfv']; $tgb = $_POST['tgb']; $dt = $_POST['dt']; if (md5($pschk) == $_SESSION['image_random_value']) { if (md5($qaz) == $_SESSION['filedtempc1']) { if (md5($wsx) == $_SESSION['filedtempc2']) { if (md5($edc) == $_SESSION['filedtempc3']) { if (md5($rfv) == $_SESSION['filedtempc4']) { if (md5($tgb) == $_SESSION['filedtempc5']) { header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s") . "GMT"); header("Cache-Control: no-cache, must-revalidate"); header("Pragma: no-cache"); header("Content-Disposition: attachment; filename="$filen""); header("Location: $subroot/$ofile?
pschk=$pschk&tcode=$tcode&qaz=$qaz&wsx=$wsx&edc=$edc&rfv=$rf
v&tgb=$tgb&td=$td"); } else { header("Location: error.php"); exit; } } } } } }
it alway open in the "$ofile" name but not in the "$filen" name? why?
我也遇到這個問題,excel"突然"不能在yahoo mail真接開啟,也試過用其他電腦開啟,但也不能,為甚麼﹖你上述所說的php我也不明白是甚麼﹖可否幫幫我﹖
唔~找到這邊。 想請問,有沒有「反過來」, 就是不跳出「是否開啟或儲存這個檔案」的dialog, 直接就開啟excel / ppt / word 的方法呢?
pdf & jpg都可以,但是就office的不行。
謝謝!