我試圖在用戶提交以下表單時重寫和下載.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」
有誰知道可能是什麼原因造成的?
您正在以這種方式輸出。如果你停止這樣做,它不會發生。如果您將腳本重定向(或鏈接)爲僅提供下載的腳本,則可以輕鬆地繞過該腳本。 – hakre