2012-07-19 118 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。但是,您可以将大量数据发布到服务器。唯一的限制是用户的上行带宽有多快以及他们的耐心。