您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息

PHP下载生成的csv文件及问题总结,_PHP教程

2024/4/18 19:18:39发布9次查看
php下载生成的csv文件及问题总结,最近做了一个项目需要把订单的信息显示出来,并且能够把相关信息放到一个.csv 文件中,下载到浏览器。虽然说csv是一种比较简单的excel表格形式,生成只要按指定格式然后生成.csv文件就可以,但是在使用中也会遇到很多问题,下面给大家分享下php下载csv文件及问题总结
首先大家先看个例子,生成csv文件并下载
//要生成csv文件的数组$csvarr=array();$csvarr[]=array('用户编号1','上班日期1','签到时间1','签退时间1');$csvarr[]=array('用户编号2','上班日期2','签到时间2','签退时间2')download_send_headers(data_export_ . date(y-m-d) . .csv);$head=array('用户编号','上班日期','签到时间','签退时间');echo array2csv($csvarr,$head);unset($csvarr);die();function array2csv(array &$array,$head){ if (count($array) == 0) { return null; } ob_start(); $df = fopen(php://output, 'w'); if(!$head){ $head=array_keys(reset($array)); } fputcsv($df,$head); foreach ($array as $row) { fputcsv($df, $row); } fclose($df); return ob_get_clean();}function download_send_headers($filename) { // disable caching $now = gmdate(d, d m y h:i:s); header(expires: tue, 03 jul 2001 06:00:00 gmt); header(cache-control: max-age=0, no-cache, must-revalidate, proxy-revalidate); header(last-modified: {$now} gmt); // force download header(content-type: application/force-download); header(content-type: application/octet-stream); header(content-type: application/download); // disposition / encoding on response body header(content-disposition: attachment;filename={$filename}); header(content-transfer-encoding: binary);}
php array生成csv文件
$val2) { $val[$key] = iconv('utf-8', 'gbk', $val2);// csv的excel支持gbk编码,一定要转换,否则乱码 } fputcsv($outputbuffer, $val); } fclose($outputbuffer); }?>
解决 fgetcsv函数在php5.2.8 中的bug
环境linux
问题解析出来的数据不完整,有为空的字段
网上查了下说是在php5.2.8 中存在bug
解决办法是使用自定义函数
function __fgetcsv(& $handle, $length = null, $d = ',', $e = '') { $d = preg_quote($d); $e = preg_quote($e); $_line = ; $eof=false; while ($eof != true) { $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length)); $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy); if ($itemcnt % 2 == 0) $eof = true; } $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line)); $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/'; preg_match_all($_csv_pattern, $_csv_line, $_csv_matches); $_csv_data = $_csv_matches[1]; for ($_csv_i = 0; $_csv_i 'test test test1'),'1'=>array('title'=>'test test test2'),'2'=>array('title'=>'test test test3'))print(chr(0xef).chr(0xbb).chr(0xbf));//设置utf-8 + bom ,处理汉字显示的乱码echo array2csv($items_data);function array2csv(array &$array){ if (count($array) == 0) { return null; } ob_start(); $df = fopen(php://output, 'w'); fputcsv($df, array_keys(reset($array))); foreach ($array as $row) { fputcsv($df, $row); } fclose($df); return ob_get_clean();}?>
导出csv文件数字会自动变科学计数法的解决方法
用程序导出的csv文件,当字段中有比较长的数字字段存在时,在用excel软甲查看csv文件时就会变成科学技术法的表现形式。
其实这个问题跟用什么语言导出csv文件没有关系。excel显示数字时,如果数字大于12位,它会自动转化为科学计数法;如果数字大于15位,它不仅用于科学技术费表示,还会只保留高15位,其他位都变0。
解决这个问题
只要把数字字段后面加上显示上看不见的字符即可,字符串结尾加上制表符\t.
php 程序可以这样判断,注意一定是\t,不是'\t'.
复制代码 代码如下:
is_numeric($val)?$val.\t:$val;
以上代码内容就是本文实现php下载生成的csv文件及问题总结,希望大家喜欢。
http://www.bkjia.com/phpjc/1044255.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/1044255.htmltecharticlephp下载生成的csv文件及问题总结, 最近做了一个项目需要把订单的信息显示出来,并且能够把相关信息放到一个.csv 文件中,下载到浏览器...
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录