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; } }