2012-07-19 125 views
3

我有一個按鈕。通過點擊按鈕,我想將網頁上顯示的一些數據導出到文件下載。JavaScript和PHP導出數據到文件

我這樣做是這樣的:我有一個export.php。我將數據作爲參數發送到PHP文件(另一個參數是文件名),PHP服務器創建一個文件並寫入數據,然後發送文件。代碼如下:

$filename = $_GET['filename'] . '.csv'; 
$export = $_GET['export']; 
$writer = fopen($filename, 'w') or die('cannot create'); 
fwrite($writer, $export . "\n"); 
fclose($writer); 

header('Content-Type: text/csv'); 
header('Content-Disposition: attachment; filename='.basename($filename)); 
readfile($filename); 
unlink($filename); 

exit(); 

對於數據較短的情況,它工作正常。但是如果數據很長,由於數據作爲URL的一部分傳遞,我會得到「Request-URI太大」的錯誤。

有沒有其他方法可以做到這一點?是否有可能使用JavaScript直接編寫數據?

+0

我的好朋友谷歌找到你[*這個例子*](http://www.finalwebsites.com/forums/topic/php-file-download)。 – alfasin 2012-07-19 21:54:37

+0

@alfasin問題是:沒有現有的文件。我需要首先在服務器上創建該文件,並且需要將數據傳遞給服務器。 – DrXCheng 2012-07-19 21:58:13

+0

因此,替換包含以下內容的while循環:'$ buffer = fread($ fd,2048);'從您想要的源讀取。 – alfasin 2012-07-19 22:42:39

回答

4

這聽起來像你發送到export.php與GET,當你應該使用POST。 GET限制爲2048個字符,而POST不受限制。

+0

這是有道理的。我會嘗試。 – DrXCheng 2012-07-19 22:01:16

+0

POST在HTTP請求BODY上發送無限信息。他試圖將它作爲參數傳遞給... – alfasin 2012-07-19 22:31:01

2

您需要將數據發佈到服務器。將FORM標記中的METHOD更改爲POST(在您的html中,而不是您的php代碼中)。

每個瀏覽器限制查詢字符串的長度/ URL的長度,限制爲browser dependent。但是,您可以將大量數據發佈到服務器。唯一的限制是用戶的上行帶寬有多快以及他們的耐心。