2011-01-21 26 views
0

我有一個XML腳本生成的PHP腳本與mod_rewrite運行。 IE打開提要確定,但我無法獲得它將文件保存到磁盤或導入到Excel。PHP生成的XML不能在IE中下載

我試圖在URL訪問文件類似於:

http://domain.com/download/export.xml 

這被寫入到下載PHP腳本,而不是實際的XML文件。

設置標頭下面之後,它仍然不可能得到IE瀏覽器來保存文件。另外,因爲它不能顯示純文本,所以將&粘貼到記事本中將不起作用,因爲IE會對XML進行各種樣式更改。

<?php 
header("Content-type: text/xml"); 
header('Content-Disposition: attachment; filename="QuoteExport_'.$quoteDate.'_'.$quoteSlot.'.xml"'); 

有沒有人知道解決方案?謝謝。

編輯: 感謝您的幫助迄今。我試過了這些頭文件的組合,仍然沒有得到我想要的結果。無論我設置什麼,IE總是在瀏覽器中顯示它,無法下載。保存功能也不起作用。任何其他想法如何強制IE使用標頭將XML保存爲文件?

EDIT2:現在的狀態是,IE提供了打開/保存選項,但同時試圖挽救,有一個彈出說,這是「無法打開此Internet站點。」但與此同時,open選項顯示沒有問題的內容。

回答

0

花了很多時間更改標題後,我採取了一種稍微不同的方法。無論我將它們設置爲什麼,它都不適合我。

無論如何,實施的解決方案是: 當客戶端登錄到URL(http〜://my-domain.com/downloads/export.xml)時,PHP腳本將生成一個真實的XML文件,其位置與request-URI並將其保存在服務器上,爲將來的刪除作業安排時間,然後有效地刷新瀏覽器。然後,第二個請求的mod重寫規則將服務於實際文件,然後IE可以正確使用該文件。未來的請求會導致循環再次運行。

微圓頂約做事的方式,但它是最快的方法。另外,我有能力從應用程序的另一部分安排文件操作,使清理工作變得更容易!

反正感謝您的幫助,我確實學到了一件事,或兩對標題選項。

5

要強制IE等瀏覽器來下載你在這個例子中,指定喜歡特定的頭文件:

header("Content-disposition: attachment; filename=\"".$fileName . ".csv\""); 
    header("Content-Type: application/force-download"); 
    header("Content-Transfer-Encoding: binary"); 
    header("Pragma: no-cache"); 
    header("Expires: 0"); 

其他明智的,如果你用文本/ XML,即認爲他知道如何顯示它和這樣做。

2

您需要設置一個會話參數IE的某些版本。假設你有$my_file_name$my_file_contents集,這裏是它會怎樣看:

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')) { 
    session_cache_limiter("public"); 
} 
session_start(); 

header('Content-type: application/octet-stream'); 
header('Content-Disposition: attachment; filename=".' $my_file_name '. "'); 
print($my_file_contents); 

(從this article改編)

0

嘗試設置內容類型爲application/xml或application /強制下載