网页最好的方法来实现excel另存为

什么被认为是最好的方式来编码,这将允许用户保存表格数据通过点击“另存为”

这是情况

我创build了一个网页,列出来自MySQL数据库(在PHP中创build的应用程序)的数据。

该页面列出数据并提供“另存为”button,以便将数据保存到用户本地计算机(csv,xml等)。

技术

是以下最好的方法来做到这一点1)保存数据到一个文件在同一个PHP程序,查询MySQL DB? 2)当用户点击网页上的“另存为”时,ajax将来自#1(服务器)的数据stream式传输到用户本地计算机

我已经阅读了一些关于如何创buildXML数据(opendocument,openxml)和PHP的Excel / XML库,但只是不完全了解stream程; 应该在查询时创build一个文件,数据如何到达用户本地计算机等。还是有不同的方法来做到这一点?

谢谢

主要有两种方法:

  • 在服务器上生成一个文件。 在第一个用户点击下载链接或每次有人下载文件时,都可以在其他任何操作之前执行此操作。 你可以通过提供一个下载链接来做到这一点,你的Web服务器或Web框架解释为一个文件的位置,例如

    http://example.org/uploads/file1.csv

    或者您为下载编写自定义操作/页面,如:

    http://example.org/download.php?filename=file1.csv ( 如何在PHP中下载链接 )

  • 生成一个将被客户端(浏览器)解释为下载的HTTP响应。 你不需要在磁盘上写入额外的文件,但是它对于文件types是非常有用的,你可以很容易地在你的程序中生成,例如CSV文件的行等等。 以下是CSV文件的示例: http : //code.stephenmorley.org/php/creating-downloadable-csv-files/

浏览器以任何方式知道,它处理文件下载,而不是只通过另一个网页是通过HTTP头:

// specify the MIME-type // (eg if it's an image or PDF most browser can display the content directly) header('Content-Type: text/csv; charset=utf-8'); // The Content-Disposition response-header field has been proposed // as a means for the origin server to suggest a default filename // if the user requests that the content is saved to a file. header('Content-Disposition: attachment; filename=data.csv'); 

你可以在这里阅读更多关于: http : //www.w3.org/Protocols/rfc2616/rfc2616-sec19.html

最后,这取决于你和你的要求。 这是一个低stream量的网站和文件是小? – 事先生成文件,让Web服务器处理下载链接。 这是一个高stream量的网站有很多小文件? – 也许在飞行中产生(如在CSV例子)。 不是每个人都应该能够下载每个文件和身份validation是由您的PHP项目pipe理? – 使用自定义的download.php脚本来检查权限会更容易。