PHP导出数据常用的三种文件格式
1.导出TXT文件,使用fopen写入到一个TXT文件中。做好换行、数据间隔、写入等操作
优点:使用简单,数据量超大也能够一直写入
缺点:如果不导入到excel很难分析数据,导入
使用方式
$file = fopen('/data.txt', 'w'); //w 代表写
//获取数据
$data = [....]; //如果这个数据太大。可以使用分块获取。例如:laravel的chunk方法
$count = count($data);
$i = 0;
while($i <= $count) {
//写入时注意数据编码格式
fwrite($file, $data[$i]['name'] . ' '); //注意间隔
fwrite($file, $data[$i]['gender'] . '/r/n'); //注意系统的换行符
$i++;
}
fclose($file);
注意事项
1.打开一个文件句柄如果不是一追加的方式打开,会覆盖里面的内容
2.循环写入数据时,尽可能使用while循环,节省运行内存使用量
3.换行符 PHP常量PHP_EOL会根据系统变换
a.windows平台相当于 echo "\r\n";
b.unix\linux平台相当于 echo "\n";
c.mac平台相当于 echo "\r";
将txt文件导入到excel
1.将txt文件导入到excel时需要注意,php写入txt文件一定要有统一的间隔。
导入操作顺序:
a.打开一个无数据的excel文档
b.在顶部导航栏选择数据
c.找到获取外部数据->自文本
d.选择所要导入的txt文件
e.根据提示选择分隔符号/固定宽度,选择编码格式
f.用本文方法导出的话选择 分隔符号选项,点击下一步
g.选择分隔符号,选择空格。点击下一步
h.根据列数据格式选择格式
i.点击完成
2.导出为CSV文件
优点:csv文件可以直接使用Excel软件打开,导入速度快,占用内存小
缺点:与excel软件有兼容问题
使用方式
set_time_limit(0); //让PHP脚本运行不会超时
ini_set('memory_limit', '256M'); //让PHP运行有更大的运行内存。确保不会内存溢出。需要根据自身服务器判断
//下载csv的文件名
$fileName = 'test.csv';
//设置头部信息
header('Content-Description: File Transfer');
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
$file = fopen('php://output', 'a');
$header = ['姓名', '性别', '手机号码']; //定义表头信息
//将数据编码转换成GBK格式
mb_convert_variables('GBK', 'UTF-8', $heade);
//将数据格式化为CSV格式并写入到output流中
fputcsv($file, $header);
//获取数据
$data = [.....]; //如果这个数据太大。可以使用分块获取。例如:laravel的chunk方法
//循环处理数据
foreach ($data as $row) {
//将数据编码转换成GBK格式
mb_convert_variables('GBK', 'UTF-8', $row);
fputcsv($file, $row);
//将已经存储到csv中的变量数据销毁,释放内存
unset($row);
}
//关闭句柄
fclose($file);
注意事项
1.每写入一个变量到CSV文件中时,需要对变量进行销毁,释放内存
2.如果要在csv输出一个空行,向句柄写入一个空数组即可
3.需要将数据编码转换为GBK格式
导出为Excel文件
优点:完美的xlsx文件
缺点:使用时所占用,运行内存高,容易内存溢出,操作复杂,需要引入第三方类库 phpoffice/phpspreadsheet
类库composer地址:https://packagist.org/packages/phpoffice/phpspreadsheet
使用方式
待研究
导出数据的三种操作方式
1.HTTP请求接口运行代码
如果超大量数据导出,会因为HTTP请求超时导致程序中断。目前我是没什么办法。
2.使用php命令直接运行php脚本
php data.php& //加&符号是为了让脚本能够一直后台运行,不中断。但是data.php的打印数据还是会占用终端页面
3.直接写sql语句查询后导出
网页版:phpmyadmin/阿里云RDS 软件:MySQL-Front(官方)/Navicat