| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- <?php
- use LewaimaiCDN;
- use LewaimaiFile;
- use Yii;
- class LewaimaiExport
- {
- /**
- * 导出excel文件
- *
- * @param array $data 导出文件的内容
- * @param string $filename 导出文件名(文件名不能加后缀,默认是加上 .csv)
- * @param string $file_path 导出文件路劲,如果为空,则使用默认路径
- * @param boolean $is_page 是否分页(导出生成多个csv文件)
- * @param boolean $is_cdn 是否将文件上传到cdn
- * @return array
- */
- public static function exportCsv($data, $filename, $file_path = '', $is_page = true, $is_cdn = true)
- {
- set_time_limit(300);
- $return = ['errcode' => 1];
- $file_arr = [];
- $count = count($data);
- $page_size = 5000;
- // 分批导出
- if ($is_page && $count > $page_size) {
- $chunk_data = array_chunk($data, $page_size);
- foreach ($chunk_data as $key => $item) {
- $chunk_file_name = $filename.'_'.($key + 1);
- $ret_file_name = self::produceCsv($item, $chunk_file_name, $file_path);
- $ret_file_name && $file_arr[] = $ret_file_name;
- }
- } else {
- $ret_file_name = self::produceCsv($data, $filename, $file_path);
- $ret_file_name && $file_arr[] = $ret_file_name;
- }
- // 打包生成的csv文件,返回zip包地址
- if (!empty($file_arr)) {
- return self::csvToZip($file_arr, $filename, '', $is_cdn);
- }
- return false;
- }
- /**
- * 生成一个csv文件,返回完整文件名
- *
- * @param array $data
- * @param string $filename
- * @param string $file_path
- * @return string
- */
- public static function produceCsv($data, $filename, $file_path = '')
- {
- if (empty($file_path)) {
- $dir_name = date('YmdHis', time());
- $file_path = Yii::app()->getBasePath().'/data/csv/'.$dir_name;
- }
- $filename = $file_path.'/'.$filename.'.csv';
- if (LewaimaiFile::write_cvs($data, $filename)) {
- return $filename;
- }
- return false;
- }
- /**
- * 将多个csv文件压缩到zip
- *
- * @param array $csv_file_arr csv文件完整路径名数组
- * @param string $zipname zip文件名
- * @param string $file_path zip文件路径,默认和csv上级目录一致
- * @param boolean $is_cdn 是否将文件上传到cdn
- * @return string zip文件名
- */
- public static function csvToZip($csv_file_arr, $zipname, $zip_path = '', $is_cdn = true)
- {
- if (empty($zip_path)) {
- $zip_path = dirname(dirname(reset($csv_file_arr))).'/';
- }
- $zip_name = $zip_path.$zipname.'.zip';
- $ret_path = addFileToZip($zip_name, $csv_file_arr);
- deldir(dirname(reset($csv_file_arr))); // 删除csv文件夹
- $return = $ret_path;
- // 上传文件到cdn,返回文件地址
- if ($ret_path && $is_cdn) {
- if ($cdn_path = LewaimaiCDN::uploadTempCvs($ret_path)) {
- $return = $cdn_path;
- } else {
- // Failed upload file to cdn!
- $return = false;
- }
- // 删除压缩包
- @unlink($ret_path);
- }
- return $return;
- }
- }
|