2012-12-08 23 views
2

我試圖強制使用稱爲'證明'的JavaScript字符串下載文件。我創建了一個隱藏窗體,它觸發了一個來自PHP腳本的動作。我沒有使用window.location.href的原因是因爲變量Proof很長,get方法無法處理它。強制下載與隱藏的表單不工作

//在點擊按鈕保存

$("#save").click(function() { 
    var Proof = $("#main").html(); 
    var url = '/download-to-file.php'; 
    //send request 
    jQuery('<form action="'+ url +'" method="post">'+ 
    '<input type="hidden" name="Proof" value="'+ Proof +'" />'+ 
    '</form>').appendTo('body').submit().remove(); 

}); 

PHP代碼:

<?php 
$Proof = $_POST["Proof"]; 
$proof = stripslashes($Proof); 

$file = 'savedproof.txt'; 


file_put_contents($file, $proof); 
header('Content-disposition: attachment; filename="'.$file.'"'); 
header("Content-Type: text/txt"); 
header("Content-Transfer-Encoding: binary"); 
header('Content-length: '.filesize($file)); 
header('Accept-Ranges: bytes'); 
header('Content-Description: File Transfer'); 

readfile($file); 
?> 

我得到一個下載對話,但該文件是空的。我甚至嘗試過使用像'test'這樣的小字符串,並且仍然是空的,所以我猜測隱藏窗體的值不起作用。

感謝

+0

你得到你的日誌文件中的任何錯誤? – pregmatch

+0

你確定你有權限寫這個文件嗎?此外..是$ Proof variabile不是空的?如果輸出是表單中的內容,那麼需要在文件上寫入什麼? –

+0

該變量不是空的,我用alert(證明)檢查,它包含html代碼。對於寫權限,我嘗試了下面的建議,它不起作用,甚至沒有下載對話出現。我只是試圖讓用戶下載網站的主要div作爲文本文件。這個主div是由用戶動態生成的。如果他願意,他可以稍後加載它。 –

回答

3

不知file_put_contents失敗,但在技術上沒有必要將數據寫入到文件自$ _ POST了。

嘗試的代碼更改爲這個,看看它的工作原理:

<?php 
$Proof = stripslashes($_POST["Proof"]) 

header('Content-disposition: attachment; filename="savedproof.txt"'); 
header("Content-Type: text/html; charset=utf-8"); 
header('Content-length: '.strlen($Proof)); 
header('Accept-Ranges: bytes'); 
header('Content-Description: File Transfer'); 

echo $Proof; 
+0

我試過你的代碼,它只是將我重定向到.../download-to-file.php,並且出現一個控制檯錯誤:「HTML文檔的字符編碼沒有聲明。如果文檔包含來自US-ASCII範圍之外的字符,文檔將在某些瀏覽器配置中顯示爲亂碼文本。頁面的字符編碼必須在文檔或傳輸協議中聲明。@ ..../download-to -file.php「 –

+0

我刪除了你的內容傳輸編碼頭,看看是否有幫助。證明HTML還是純文本?如果它的html,你可以嘗試'Content-Type:text/html; charset = UTF-8「作爲內容類型標題。 – drew010

+0

謝謝,它工作時,我添加額外的標題和內容類型。但是,引用有一些問題,但這對我來說是至關重要的,至少在文件中有一些內容。再次感謝。 –