PHP - 文件输出、Excel导出、Curl
文件输出
//打开句柄
$handle = @fopen($fileurl, 'r');
if (!$handle) {
return msgInfo(500506, '证书不存在');
}
ob_start(); //打开缓冲区
header("Content-type: application/octet-stream ");
header("Accept-Ranges: bytes ");
header("Content-Disposition: attachment; filename={$vgw_info['server_name']}.zip"); //下载后的文件名
$size = readfile($fileurl);
header("Accept-Length: " . $size);
exit;
Curl
/**
* CURL请求
*
* @param string $method Post/Get
* @param [type] $url
* @param array $data
* @param array $headers
* @param integer $log 是否记录日志 1是 0否
* @return array
*/
function CommonRequest($method = 'POST', $url, $data = [], $headers = [], $log = 1, $timeout = 30)
{
if (empty($headers)) $headers = COMMON_HEADER;
$curl = curl_init();
$method = strtoupper($method);
$curl_data = [
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_CONNECTTIMEOUT => $timeout,
CURLOPT_TIMEOUT => $timeout,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => $method,
CURLOPT_POSTFIELDS => $data,
CURLOPT_HTTPHEADER => $headers,
];
if ($method == 'GET') unset($curl_data[CURLOPT_POSTFIELDS]);
curl_setopt_array($curl, $curl_data);
$sContent = curl_exec($curl);
// 获取状态码
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
// 根据头大小去获取头信息内容
$result['httpCode'] = $httpCode;
$result['response'] = json_decode($sContent, 1);
$res = [
'url' => $url,
'data' => is_array($data) ? $data : (strstr($data, '{') ? json_decode($data, 1) : $data),
'httpCode' => $result['httpCode'],
'response' => $result['response'],
'headers' => $headers,
];
//日志
if ($log) {
debugLog('requests', $method . '-result', $res);
}
return $result;
}
文件导出
使用 phpoffice/phpspreadsheet 插件
业务代码
//标题
$title = array($tran_info['title'] . ':', $filename);
//存在数据
if (isset($result['result'][0])) {
//表头
foreach ($result['result'][0] as $key => $val) {
$listTitle[] = $tran_info[$key];
}
$data[] = $listTitle;
//表格内容
foreach ($result['result'] as $key => $val) {
foreach ($val as $k => $v) {
$listData[] = $v;
}
$data[] = $listData;
unset($listData);
}
}
//文件名
$filename = str_replace('+', '%20', urlencode($filename));
//获取文件地址
$file_path = export_excel($data, $title, $filename, 'save');
//TP自带函数下载文件 force强制下载
return download($file_path, $filename)->force(true);
通用导出代码
/**
* 数组转xls格式的excel文件
* @param $data 表格内容
* @param $title 表头
* @param $output_mode 输出方式 output直接输出 save保存服务器后返回文件地址
* @throws PHPExcel_Exception
* @throws PHPExcel_Reader_Exception
* @throws PHPExcel_Writer_Exception
*/
function export_excel($data, $title, $filename, $output_mode = 'output')
{
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
//表头
//设置单元格内容
$titCol = 'A';
foreach ($title as $key => $value) {
// 单元格内容写入
$sheet->setCellValue($titCol . '1', $value);
$titCol++;
}
$row = 2; // 从第二行开始
foreach ($data as $item) {
$dataCol = 'A';
foreach ($item as $value) {
// 单元格内容写入
$sheet->setCellValue($dataCol . $row, $value);
$dataCol++;
}
$row++;
}
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="' . $filename . '.xlsx"'); //加双引号 目的与tp6的download函数头部一致
header('Cache-Control: max-age=0');
$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
//直接输出文件流
if ($output_mode == 'output') {
$writer->save('php://output');
exit;
}
//保存到服务器后再返回文件地址
else if ($output_mode == 'save') {
$path = 'storage/export/' . $filename . '.xlsx';
$writer->save($path);
return root_path() . 'public/' . $path;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!