74 lines
2.6 KiB
PHP
74 lines
2.6 KiB
PHP
|
|
<?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!");
|
|||
|
|
|
|||
|
|
}
|
|||
|
|
}
|