1、前言
有时需要将数据库表资源导出excel,做成一些报表数据。
1. 使用PHP的类库,进行导出,如PHPExcel
2.使用PHP原生的方法进行导出
而本文介绍的就是,如何通过原生方法导出excel
2、关键函数
2.1、ob输出
•ob_start(); •ob_get_contents •ob_end_clean •fopen •fwrite •fclose •iconv
2.2、header输出
1.header 2.iconv
3、使用ob函数进行excel到导出
ob函数主要分为三步:
1.进行缓存的设置 2.读取缓存 3.写入文件
下面贴上导出的excel类
PHP
class Excel
{
// ob函数缓存的开始
public static function start ()
{
ob_start();
}
// 获取缓存内容
public static function save ($path)
{
$data = ob_get_contents();
ob_end_clean();
self::writeToExcel($path,$data);
}
//写到文件
private static function writeToExcel ($fn,$data)
{
$dir = self::setDir();
$fp = fopen($dir . '/'. $fn,'wb');
fwrite($fp,$data);
fclose($fp);
}
//excel默认是GKB,所有要转码
public static function setChar ($value,$inchar = 'utf-8',$outchar ='gbk')
{
return iconv($inchar,$outchar,$value);//转化编码
}
//创建目录,linux系统一般要写到文件,目录需要w谦虚,而文件需要x权限,为了省事直接建立子文件夹,可以不需要修改谦虚
public static function setDir($dirName = 'excel')
{
if(!is_dir($dirName)) {
mkdir($dirName);
}
return $dirName;
}
}
4、完整页面代码
$sql = 'select * from user';
$res = $link->query($sql);
//判断是否有发送get数据
if(isset($_GET['id'])){
$name = empty($_GET['id']) ? 'a' . rand(1000,9999) : $_GET['id'] ;
$filename = $name . '.xls';
//设置缓存的开始
Excel::start();
}
?>
<?PHP
//页面输出一般是不需要转码的,excel输出才需要转码
echo '';
$res = $link->query($sql);
//判断是否有发送get数据
if(isset($_GET['id'])){
$name = empty($_GET['id']) ? 'a' . rand(1000,9999) : $_GET['id'] ;
$filename = $name . '.xls';
//设置缓存的开始
Excel::start();
}
?>
<?PHP
//页面输出一般是不需要转码的,excel输出才需要转码
echo '