Kal*_*sin 7 php csv line-endings
我创建了一个CSV文件供我们的客户使用
$output = fopen('php://output', 'w');
Run Code Online (Sandbox Code Playgroud)
并使用fputcsv()
将数据写入客户端下载的CSV文件.
我在Linux上运行PHP,因此很多Windows应用程序都不解释行结尾.
我可以写CSV文件到服务器上的目录,读回并执行str_replace()
从\n
到\r\n
,但是这似乎解决问题的一个非常笨拙的方法.有没有办法在不创建物理文件的情况下执行转换?
Ja͢*_*͢ck 18
您可以使用流过滤器来完成此任务.此示例写入物理文件,但它也应该正常工作php://output
.
// filter class that applies CRLF line endings
class crlf_filter extends php_user_filter
{
function filter($in, $out, &$consumed, $closing)
{
while ($bucket = stream_bucket_make_writeable($in)) {
// make sure the line endings aren't already CRLF
$bucket->data = preg_replace("/(?<!\r)\n/", "\r\n", $bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
// register the filter
stream_filter_register('crlf', 'crlf_filter');
$f = fopen('test.csv', 'wt');
// attach filter to output file
stream_filter_append($f, 'crlf');
// start writing
fputcsv($f, array('1 1', '2 2'));
fclose($f);
Run Code Online (Sandbox Code Playgroud)