如何使 fputcsv “回显”数据
Posted
技术标签:
【中文标题】如何使 fputcsv “回显”数据【英文标题】:How to make fputcsv "echo" the data 【发布时间】:2011-06-09 05:27:04 【问题描述】:我需要一种方法让fputscv
函数即时将数据写入浏览器,而不是创建一个临时文件,将数据保存到该文件并执行echo file_get_contents()
。
【问题讨论】:
【参考方案1】:在 php docs 网站上找到这个,首先在函数引用下评论:
function outputCSV($data)
$outstream = fopen("php://output", 'w');
function __outputCSV(&$vals, $key, $filehandler)
fputcsv($filehandler, $vals, ';', '"');
array_walk($data, '__outputCSV', $outstream);
fclose($outstream);
还有第二种选择:
$csv = fopen('php://temp/maxmemory:'. (5*1024*1024), 'r+');
fputcsv($csv, array('blah','blah'));
rewind($csv);
// put it all in a variable
$output = stream_get_contents($csv);
希望这会有所帮助!
顺便说一句,PHP 文档应该始终是您尝试解决问题的第一站。 :-)
【讨论】:
PHP 网站的 outputCSV() 不起作用,你有没有测试过这个? 我在 4 多年前回答了这个问题,也许有什么改变了?我不能诚实地说我是否尝试过,但我怀疑我会尝试的。随意扩展究竟是什么不起作用,而不是没有细节的空回复,也许我会进一步调查。 @VladimirGhetau 我刚刚测试了 Seb Barre 在这里发布的这个特殊的,它工作......你必须提供正确的数据 - 它希望已经将 CSV 解析为数组数组@ 987654324@ ! @SebBarre 内部函数可以只定义在外部 .... ANYWAY: 我添加了一些常量和模拟:ideone.com/giN5qW【参考方案2】:By a comment on the PHP site
<?php
$out = fopen('php://output', 'w');
fputcsv($out, array('this','is some', 'csv "stuff", you know.'));
fclose($out);
?>
【讨论】:
写入变量:php.net/manual/en/function.fputcsv.php#74118【参考方案3】:由于最初的提问者想要“即时写入浏览器”,也许值得注意(就像我的情况,没有人提到它)如果你想强制一个文件名和一个要求下载文件的对话框在浏览器中,您必须在使用fputcsv
输出任何内容之前设置正确的标题:
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=myFile.csv');
【讨论】:
谢谢,这是我在将 CSV 输出到浏览器时 90% 的时间都想做的事情,您节省了我单独查找的时间。【参考方案4】:生成 CSV 实际上并不是那么困难(解析 CSV 有点复杂)。
将二维数组写入 CSV 的示例代码:
$array = [
[1,2,3],
[4,5,6],
[7,8,9]
];
// If this CSV is a HTTP response you will need to set the right content type
header("Content-Type: text/csv");
// If you need to force download or set a filename (you can also do this with
// the download attribute in html5 instead)
header('Content-Disposition: attachment; filename="example.csv"')
// Column heading row, if required.
echo "Column heading 1,Column heading 2,Column heading 3\n";
foreach ($array as $row)
$row = array_map(function($cell)
// Cells containing a quote, a comma or a new line will need to be
// contained in double quotes.
if (preg_match('/["\n,]/', $cell))
// double quotes within cells need to be escaped.
return '"' . preg_replace('/"/', '""', $cell) . '"';
return $cell;
, $row);
echo implode(',', $row) . "\n";
【讨论】:
以上是关于如何使 fputcsv “回显”数据的主要内容,如果未能解决你的问题,请参考以下文章
获取 PHP 错误警告:fputcsv() 期望参数 2 为数组