2012-07-15 88 views
0

我有2个文件 - 1.csv and 2.csv。我可以通过已知的方法下载1.csv用PHP:用PHP下载服务器上的几个文件的内容

$file = '1.csv'; 
header('Content-Description: File Transfer'); 
header('Content-Type: application/jpeg'); 
header('Content-Disposition: attachment; filename='.basename($file)); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: public'); 
header('Pragma: public'); 
header('Content-Length: ' . filesize($file)); 
ob_clean(); 
flush(); 
readfile($file); 

但我的目的是要在这两个文件的下载的文件内容 - 1.csv2.csv。有没有人有一些想法如何实现这一点? 预先感谢您。

+1

定义“两个文件的内容”。你想将文件连接成一个更长的文件吗?或者你想让用户获得两个不同的文件? – 2012-07-15 11:16:50

+0

在一个字符串中读取两个文件可能并输出为1-2.csv? – Gntem 2012-07-15 11:22:42

+0

这是正确的 - 将文件连接成一个较长的文件。 – 2012-07-17 07:59:28

回答

2

串联如果我理解正确,你这个应该这样做。

$file1 = '1.csv'; 
$file2 = '2.csv'; 
header('Content-Description: File Transfer'); 
header('Content-Type: text/comma-separated-values'); 
header('Content-Disposition: attachment; filename='.basename($file1, '.csv') . '-' . basename($file2, '.csv') . '.csv'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: public'); 
header('Pragma: public'); 
header('Content-Length: ' . (filesize($file1) + filesize($file2))); 
ob_clean(); 
flush(); 
readfile($file1); 
readfile($file2); 

考虑使用多个文件的循环和心灵的Content-Type头的CSV文件的变化。

+0

这不起作用..只下载第一个文件。你测试过了吗? – Samson 2012-07-15 11:42:21

+0

是的,我做到了。你是否使用我例子中的内容长度计算? 根据第一个文件的内容,您可能必须在读取文件之间放置额外的换行符(这也需要您将新行的大小添加到Content-Length标头)。当它仍然只显示第一个文件的内容时,也许你的第二个文件是空的? – 2012-07-15 14:26:41

+0

这很奇怪..它提示我下载一个文件,只包含第一个文件的数据。 – Samson 2012-07-15 14:30:54

1
$file1 = '1.csv'; 
$file2 = '2.csv'; 
header('Content-Description: File Transfer'); 
header('Content-Type: application/jpeg'); 
header('Content-Disposition: attachment; filename="1-2.csv"'); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: public'); 
header('Pragma: public'); 
header('Content-Length: ' . (filesize($file1)+filesize($file2))); 
ob_clean(); 
flush(); 
echo file_get_contents($file1).file_get_contents($file2); 

的下载2项文件内容

+0

谢谢你,radashk,你的解决方案也适用于我。 – 2012-07-17 08:01:01

相关问题