phpexcel로 테이블을 엑셀파일로 다운로드 하는데 파일형식 오류가 나옵니다.
본문
안녕하세요.
phpexcel로 테이블을 엑셀파일로 다운로드 받으려고 하면 아래 이미지처럼 오류가 나옵니다.
A서버에서는 정상작동이 되는데
cafe24로 옮기면 다른 부분은 정상인데 phpexcel로 다운로드시에 저 오류가 발생합니다.
혹 어떤게 문제인지 알 수 있을까요??
답변 5
저장한 액셀 화일을 문서편집기로 열어보면 첫줄에 에러코드가 있습니다
에러코드를 올려보세요
카페24 서버환경이 다르면 그럴수도있어요
서버에서 필요한 라이브러리를 올바르게 설치했는지 확인해보세요.
PHP 버전과 호환되는지 확인하셔야 합니다.
또한 PHPExcel은 더 이상 새로운 지원이 중단된 상태입니다. PhpSpreadsheet 업그레이드 고려해봐야합니다.
실제로 엑세파일 저장하고 열리는데는 문제가 없으므로,
그 안내문 무시하고 열어서 사용하시면 됩니다.
요걸 한번 사용해 보세요. xlsx 로 저장됩니다.
GitHub - mk-j/PHP_XLSXWriter: Lightweight XLSX Excel Spreadsheet Writer in PHP
xlsxwriter.class.php 파일 다운받고( 이 파일만 필요합니다.)
<?php
include_once('./_common.php');
set_include_path( get_include_path().PATH_SEPARATOR."..");
include_once("xlsxwriter.class.php");
$f_name = "테스트";
$result = sql_query("select wr_id,wr_content,wr_name,wr_last,wr_1,wr_2,wr_3,wr_4,wr_5,wr_6,wr_7,wr_8,wr_9,wr_10 from {$write_table} order by wr_name");
$header = [];
$widths = [];
// $header 제목명은 모두 달라야 됨
$header["연번"] = 'integer';
$header["예약자"] = 'string';
$header["예약일자"] = 'string';
$header["예약시간"] = 'string';
$header["전화번호"] = 'string';
$header["성별"] = 'string';
$header["요청사항"] = 'string';
$header["신청일"] = 'string';
//셀너비
$widths[] = 10; $widths[] = 20; $widths[] = 20; $widths[] = 20; $widths[] = 20; $widths[] = 20;$widths[] = 50; $widths[] = 30;
$writer = new XLSXWriter();
$styles1 = array('font'=>'맑은 고딕','font-size'=>12,'font-style'=>'bold', 'fill'=>'#ccff999', 'halign'=>'left', 'valign'=>'center', 'border'=>'left,right,top,bottom', 'widths'=>$widths);
$styles2 = array( 'font'=>'맑은 고딕','font-size'=>12, 'halign'=>'left', 'valign'=>'center', 'border'=>'left,right,top,bottom','wrap_text'=>true);
$writer->writeSheetHeader('Sheet1', $header, $styles1); //제목줄 서식 포함
$contents = [];
$x = 0;
foreach ($result as $field) {
$x++;
$contents[] = $y;
$contents[] = $field['wr_name'];
$contents[] = $field['wr_1'];
$contents[] = $field['wr_2'];
$contents[] = $field['wr_3'];
$contents[] = $field['wr_4'];
$contents[] = $field['wr_content'];
$contents[] = $field['wr_last'];
$writer->writeSheetRow('Sheet1', $contents, $styles2);
$contents = [];
}
$filename = $f_name."신청현황.xlsx";
$writer->writeToFile(G5_DATA_PATH.'/tmp/'.$filename);
$filepath = G5_DATA_PATH.'/tmp/'.$filename;
$filepath = addslashes($filepath);
$original = urlencode($filename);
if(preg_match("/msie/i", $_SERVER["HTTP_USER_AGENT"]) && preg_match("/5\.5/", $_SERVER["HTTP_USER_AGENT"])) {
header("content-type: doesn/matter");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"$original\"");
header("content-transfer-encoding: binary");
} else if (preg_match("/Firefox/i", $_SERVER["HTTP_USER_AGENT"])){
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"".basename($filename)."\"");
header("content-description: php generated data");
} else {
header("content-type: file/unknown");
header("content-length: ".filesize("$filepath"));
header("content-disposition: attachment; filename=\"$original\"");
header("content-description: php generated data");
}
header("pragma: no-cache");
header("expires: 0");
flush();
$fp = fopen($filepath, "rb");
if (!fpassthru($fp)) {
fclose($fp);
}
//파일 삭제
$delete_file = G5_DATA_PATH.'/tmp/'.$filename;
if(file_exists($delete_file) ){
@unlink($delete_file);
}
답변을 작성하시기 전에 로그인 해주세요.