2012-10-15 138 views
0

我試圖在用戶提交以下表單時重寫和下載.txt文件,但在最後一道屏障出現問題。使用PHP創建和下載文件

<form id="saveFile" action="index.php?download" method="POST" onsubmit="return false;"> 
    <input type="submit" name="backupFile" id="backupFile" value="Save a file" /> 
    <input type="hidden" name="textFile" id="textFile" /> 
</form> 

當提交按鈕被按下我運行jQuery函數包含以下(簡化)代碼 - 我已經採取了什麼我實際上節省了代碼,並使用簡單的字符串替換它。這會設置'隱藏'輸入類型,然後提交表單。

$("#textFile").val('This is the text I will be saving'); 
document.forms['saveJSON'].submit(); 

當表單提交,下面的PHP代碼運行:

<?php 
if (isset($_GET['download'])) { 

    $textData = $_POST["textFile"]; 
    $newTextData = str_replace("\\","",$textData); 
    $myFile = "php/data.txt"; 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    fwrite($fh, $newTextData); 
    fclose($fh); 

    header("Cache-Control: public"); 
    header("Content-Description: File Download"); 
    header("Content-Disposition: attachment; filename='".basename($myFile)."'"); 
    header("Content-Type: application/force-download"); 
    header("Content-Transfer-Encoding: binary"); 
    readfile($myFile); 
} 
?> 

截至FCLOSE(FH $);行代碼實際上工作正常; .txt文件已更新爲所需的新內容和文件下載。但是,當我打開下載的文件時,它包含.txt文件文本以及來自網頁(index.php)的大量內容。

例如,該文件可能看起來像這樣

「這是我將節省

文本這是我的網站

的跟隨了我的內容的其餘部分的H1」

有誰知道可能是什麼原因造成的?

+1

您正在以這種方式輸出。如果你停止這樣做,它不會發生。如果您將腳本重定向(或鏈接)爲僅提供下載的腳本,則可以輕鬆地繞過該腳本。 – hakre

回答

2

首先,HARKE說,您重定向(或鏈接)到一個腳本,只需要提供下載的照顧,你可以去周圍,很容易

乾淨的輸出緩衝器之前閱讀文件後退出腳本讀取文件

ob_clean(); 
    flush(); 
    readfile($file); 
    exit; 
+0

謝謝!添加這三條線,使其工作沒有任何重定向! :) – Patrick

+0

是的,它的工作原理!因爲它清理緩衝區並退出腳本。第一條消息是給你額外的信息。不用謝 :) – Venu