2016-07-01 55 views
0

在一種「分步」/「嚮導」設置中,我嘗試將新創建的純文本文件發送給用戶。使用PHP下載純文本顯示在瀏覽器窗口中,而不是下載

問題是,在本地主機上(windows,xampp)它按預期工作,但在遠程機器上執行(託管網站空間),它將瀏覽器窗口中的文件內容顯示爲純文本。 (使用相同的瀏覽器進行測試:chrome)

該文件是一個純文本文件,其中包含數據庫備份(只有少數entrys,不大),並且在下載之前創建了一個步驟。下一步是刪除它,那也可以。文件本身是有效的,所有手柄都關閉。瀏覽器中顯示的內容是包含所有行的實際文件。

$ _ POST消毒正值當下載的作品,爲簡化unsanitized大氣壓:

<?php 
require_once('CSettings.php'); 
$s = new CSettings(); 
$file = $_POST['file']; 

if (file_exists($file)) { 
    header('Content-Description: File Transfer'); 
    header('Content-Type: text/plain'); 
    header('Content-Disposition: attachment; filename="'.basename($file).'"'); 
    header('Expires: 0'); 
    header("Pragma: public"); 
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header('Content-Length: ' . filesize($file)); 
    readfile($file); 
} 

?> 

<form action="index.php" method="post" accept-charset="UTF-8"> 
    <input type="submit" value="Delete backup file from the server" class="btn_red"> 
    <input type="hidden" value="<?php echo $file; ?>" name="file"> 
    <input type="hidden" value="delete_backup" name="view"> 
</form> 

有什麼建議?擺弄內容類型已經無濟於事。最後的手段是壓縮整個文件,然後再試一次,但這會使它不必要複雜。

回答

0

可能工作的一個解決方案是使用下載html屬性,但它似乎並未在Safari中受支持。在點擊鏈接時(而不是導航到 文件)

下載文件:

<a href="/images/myw3schoolsimage.jpg" download>

來源:http://www.w3schools.com/tags/att_a_download.asp

然而,這可能需要你把下載在一個單獨的腳本。

你也可以看這裏:How to Automatically Start a Download in PHP?

+0

是的,將嘗試作爲一種解決方法。謝謝你的提升,「下載」屬性對我來說是未知的。 但仍試圖找出爲什麼這件事不會在現場機器上下載... – Idenwen

+0

@Idenwen另一個有用的鏈接:http://www.media-division.com/the-right-way-to-處理文件下載在PHP/ –

+0

謝謝,這就是我得到了 '頭(「緩存控制:必須重新驗證,後檢查= 0,預檢查= 0」);' 從工作IE問題(但有問題的用戶只使用chrome [種類的內聯網應用程序]) – Idenwen

相關問題