
首先,让我们看一个示例,生成CSV文件并下载它。
用于生成CSV文件的数组
csvarr美元=阵();
csvarr美元{ } =阵列(1用户ID、日期1,1标志的时间,返回时间1');
csvarr美元{ } =阵列(2的用户ID,日期2,2标志的时间,返回时间2')
download_send_headers(data_export_ 。日期(当前)。;
$头=(用户ID,数组的开始日期标志的时间','回报');
回声array2csv(csvarr美元,美元的头);
unset($ csvarr);
(死亡);
功能array2csv(数组,$头)
{
如果(计数(数组)= 0){
返回null;
}
ob_start();
$ df = fopen(PHP: / /输出
如果(!美元头){
合头= array_keys(复位($array));
}
fputcsv($ DF,$头);
foreach(数组$行){
fputcsv($ DF,$行);
}
Fclose($ DF);
返回ob_get_clean();
}
功能download_send_headers($文件名){
禁用缓存
gmdate(现在美元=D、D M Y H:我:);
标题(到期:二,03月2001日6时00分00秒格林尼治);
标题(缓存控制:最大年龄= 0,没有缓存,必须重新验证,代理验证);
页眉(最后修改:{ $ });
强制下载
页眉(内容类型:应用程序/下载);
标题(内容类型:应用程序/字节流);
标题(内容类型:应用程序下载);
响应体/编码
标题(内容配置:附件;文件名=文件名});
标题(内容传输编码:二进制);
}
PHP数组生成CSV文件
< PHP
数据=数组(
阵列('row_1_col_1 ','row_1_col_2 ','row_1_col_3),
阵列('row_2_col_1 ','row_2_col_2 ','row_2_col_3),
阵列('row_3_col_1 ','row_3_col_2 ','row_3_col_3),
);
文件;
页眉(内容类型:文本);
标题()内容配置:附件;文件名;
标题(杂注:无缓存);
标题(过期:0 );
outputcsv($数据);
功能outputcsv($数据){
美元= fopen(PHP输出缓冲: / /输出
foreach($数据达Val){
foreach(瓦尔美元美元美元关键= val2){
瓦尔{ } =美元美元关键iconv('utf-8 ','gbk,$ val2);
/ / Excel支持GBK编码格式,我们必须转换,或乱码
}
fputcsv($美元输出缓冲,Val);
}
Fclose($输出缓冲);
}
>
解决php5.2.8 fgetcsv函数的bug
linux环境
由问题解析的数据不完整,并且有一个空字段。
在互联网上,它说的错误存在于php5.2.8
解决方案是使用自定义函数。
功能__fgetcsv($手柄,长度为零美元,美元D = '、',$ E =){
a preg_quote美元($);
e = preg_quote(e);
= $ _line ;
$ = false;
同时($ EOF)!= TRUE){
_line美元=(空(合长度)fgets($处理):fgets($美元处理,长度));
itemcnt美元= preg_match_all('。E.美元/美元美元,_line,假人);
如果($ itemcnt % 2 = = 0)
$ =真;
}
($ _csv_line = preg_replace /(:| { })$ ,美元D、装饰($ _line));
($ _csv_pattern =/{ ^。美元E * }((e)$ e。。$ e } *。E.美元| { ^。*D;
preg_match_all(_csv_pattern美元美元美元,_csv_line,_csv_matches);
_csv_data美元= $ _csv_matches { 1 };
为($ _csv_i = 0;美元_csv_i <计数($ _csv_data);$ _csv_i ++){
_csv_data美元{ $ _csv_i } = preg_replace( / ^。e。*)。E.美元/美元的,1美元,美元,美元_csv_i _csv_data { });
_csv_data美元{ $ _csv_i } = str_replace($ E $ E,E _csv_data美元美元美元,_csv_i { });
}
返回空(美元_line)假:_csv_data美元;
}
Excel无法正确读取长度超过32K CSV域问题
当用Excel打开PHP导出CSV文件时,产品表达式字段将显示在两行中。
看这场发现场大于32K,Excel将弦断成两行,如果小于32K,是正常的。
这是excel的局限性,尚未找到解决方案。
单元格最多为32767个字符。
解决乱码的问题,打开Excel在PHP的CSV文件生成的UTF-8编码
PHP生成UTF-8编码使用Excel打开中国混沌编码的CSV文件,因为在输出CSV文件没有BOM。
< PHP
gmdate(现在美元=D、D M Y H:我:);
标题(到期:二,03月2001日6时00分00秒格林尼治);
标题(缓存控制:最大年龄= 0,没有缓存,必须重新验证,代理验证);
页眉(最后修改:{ $ });
强制下载
页眉(内容类型:应用程序/下载);
标题(内容类型:应用程序/字节流);
标题(内容类型:应用程序下载);
响应体/编码
标题(内容配置:附件;文件名=文件名});
标题(内容传输编码:二进制);
items_data美元=阵列(
0= >阵列(标题= >测试测试Test1),
1= >阵列(标题= >测试测试test2),
2= >阵列(标题= >对照试验试验)
)
打印(CHR(0xef)。Chr(0xbb)。Chr(0xbf));
/ /集UTF-8 + BOM处理、汉字显示乱码
回声array2csv($ items_data);
功能array2csv(数组)
{
如果(计数(数组)= 0){
返回null;
}
ob_start();
$ df = fopen(PHP: / /输出
fputcsv($ DF,array_keys(复位($array)));
foreach(数组$行){
fputcsv($ DF,$行);
}
Fclose($ DF);
返回ob_get_clean();
}
>
自动变科学计数法求解CSV文件数的方法
当程序在字段中有较长的字段时,当您看到带有excel软装甲的CSV文件时,程序导出的CSV文件将成为一种科学和技术法规的形式。
事实上,这个问题与用什么语言导出CSV文件无关,当excel显示数字时,如果数字大于12位,就会自动转换成科学的计数方法。如果数字大于15位,它不仅用于科学和技术费用,而且只保留15位,其余将改为0。
解决这一问题
只需在不可见字符后面添加数字字段,字符串的结尾加上制表符。
PHP程序可以判断它必须是
复制代码代码如下所示:
is_numeric(美元值)值美元T:美元价值;
以上代码内容是实现php下载和生成CSV文件的问题汇总,希望大家喜欢。