Files
xk-api-yii/common/services/ExportService.php

74 lines
2.6 KiB
PHP
Raw Normal View History

2024-09-19 11:32:39 +08:00
<?php
namespace common\services;
class ExportService
{
//导出
public function export($headlist,$Name,$class)
{
ini_set("memory_limit", "2048M");
set_time_limit(0);
$params = \Yii::$app->request->post();
$data = $class->inventory($params);
//设置导出的文件名
$fileName = iconv('utf-8', 'gbk', "$Name" . date("Y-m-d"));
header('Content-Type: application/vnd.ms-excel');
//指明导出的格式
header('Content-Disposition: attachment;filename="' . $fileName . '.xsl"');
header('Cache-Control: max-age=0');
//打开PHP文件句柄,php://output 表示直接输出到浏览器
$fp = fopen('php://output', 'a');
//输出Excel列名信息
foreach ($headlist as $key => $value) {
//CSV的Excel支持GBK编码一定要转换否则乱码
$headlist[$key] = $value;
}
//将数据通过fputcsv写到文件句柄
fputcsv($fp, $headlist);
//每隔$limit行刷新一下输出buffer不要太大也不要太小
$limit = 100000;
//逐行取出数据,不浪费内存
foreach ($data as $k => $v) {
//刷新一下输出buffer防止由于数据过多造成问题
if ($k % $limit == 0 && $k != 0) {
ob_flush();
flush();
}
$row = $data[$k];
foreach ($row as $key => $value) {
$row[$key] = $value;
}
fputcsv($fp, $row);
}
}
public static function ExportByCors($parameter)
{
ini_set("memory_limit", "2048M");
set_time_limit(0);
if (is_array($parameter)) {
$filename = date('Y-m-d_H-i-s') . '.csv';
// header('Content-Type: application/vnd.ms-excel');
header('Content-Type: application/json');
header('Access-control-Allow-Origin:*');
header("Content-Disposition: attachment;filename=$filename");
header('Cache-Control: max-age=0');
$fp = fopen('php://output', 'w');
fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF));
if ( ! empty($parameter['header']) && is_array($parameter['header'])) {
fputcsv($fp, $parameter['header']);
}
if (isset($parameter['data'])) {
foreach ($parameter['data'] as $row) {
fputcsv($fp, $row);
}
exit();
}
return true;
}
// throw new \yii\web\HttpException(500, "Not a valid parameter!");
}
}