我在MySQL数据库中有数据。我向用户发送一个URL,以获取他们的数据作为CSV文件。
我有链接的电子邮件,MySQL查询等覆盖。
当他们点击链接时,如何弹出从MySQL下载带有记录的CVS的窗口?
我已经有了所有能拿到唱片的资料。我只是不明白如何让PHP创建CSV文件,并让他们下载一个扩展名为. CSV的文件。
我在MySQL数据库中有数据。我向用户发送一个URL,以获取他们的数据作为CSV文件。
我有链接的电子邮件,MySQL查询等覆盖。
当他们点击链接时,如何弹出从MySQL下载带有记录的CVS的窗口?
我已经有了所有能拿到唱片的资料。我只是不明白如何让PHP创建CSV文件,并让他们下载一个扩展名为. CSV的文件。
当前回答
Try:
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "record1,record2,record3\n";
die;
etc
编辑:这是我用来可选地编码CSV字段的代码片段:
function maybeEncodeCSVField($string) {
if(strpos($string, ',') !== false || strpos($string, '"') !== false || strpos($string, "\n") !== false) {
$string = '"' . str_replace('"', '""', $string) . '"';
}
return $string;
}
其他回答
在$output变量中放入CSV数据,并返回正确的报头
header("Content-type: application/download\r\n");
header("Content-disposition: filename=filename.csv\r\n\r\n");
header("Content-Transfer-Encoding: ASCII\r\n");
header("Content-length: ".strlen($output)."\r\n");
echo $output;
要让它以CSV格式发送,并给出文件名,请使用header():
http://us2.php.net/header
header('Content-type: text/csv');
header('Content-disposition: attachment; filename="myfile.csv"');
至于创建CSV本身,您只需要遍历结果集,格式化输出并发送它,就像处理任何其他内容一样。
我知道这个帖子有点老了,但作为将来的参考,以及像我这样的新手:
这里的其他人都解释了如何创建CSV,但忽略了问题的基本部分:如何链接。为了链接到CSV-file的下载,只需链接到.php-file,该文件将响应为. CSV-file。PHP头文件可以做到这一点。这可以实现一些很酷的东西,比如向查询字符串中添加变量并自定义输出:
<a href="my_csv_creator.php?user=23&othervariable=true">Get CSV</a>
my_csv_creator.php可以使用查询字符串中给出的变量,例如使用不同的或自定义的数据库查询,更改CSV的列,个性化文件名等,例如:
User_John_Doe_10_Dec_11.csv
最简单的方法是使用一个专门的CSV类,像这样:
$csv = new csv();
$csv->load_data(array(
array('name'=>'John', 'age'=>35),
array('name'=>'Adrian', 'age'=>23),
array('name'=>'William', 'age'=>57)
));
$csv->send_file('age.csv');
Try:
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=file.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo "record1,record2,record3\n";
die;
etc
编辑:这是我用来可选地编码CSV字段的代码片段:
function maybeEncodeCSVField($string) {
if(strpos($string, ',') !== false || strpos($string, '"') !== false || strpos($string, "\n") !== false) {
$string = '"' . str_replace('"', '""', $string) . '"';
}
return $string;
}