채택완료
서버 이전 후 excel 출력시 파일 손상 및 지원하지 형식 오류
window 서버에 php7.3버전으로 설치 후 서버 이전을 했는데, excel 출력시 웹상에서 다운은 되지만 파일을 열어 보면 "파일 손상 및 지원하지 형식 오류 "라는 문구가 출력됩니다.
php 버전 문제 인 거같아 전 서버의 php5.6버전으로 다운그레이드 했지만 똑같은 오류가 계속 나옵니다.
제가 생각하는 오류는 두 가지 인데,
1. 임시 파일 생성 문제
tempnam(G5_PATH, 'a.xls');로 임시파일을 생성하면
a.xls(문자).tmp가 출력되야 하는데 a(문자).tmp로 생성이 됩니다.
2. 헤더 문제
header("Content-Type: application/x-msexcel; name=\"".$fname."\"");
header("Content-Disposition: inline; filename=\"".$fname."\"");
부분에서 문제가 출력되는거 같습니다.
혹은 서버 설정 문제인가요?
답변 5개 / 댓글 3개
채택된 답변
+20 포인트
찾아보니 위와 같은 경우도 있네요.
다른 부분들은 phpexcel 예제 파일 참고하시구요.
https://github.com/PHPOffice/PHPExcel/blob/1.8/Examples/01simple-download-xlsx.php
phpexcel 사용중이라면
마지막에 부분에 exit; 넣어보세요.
~~~
exit;
?>
답변에 대한 댓글 2개
음.. 저도 최근에 파일 손상 및 지원하지 형식 오류 가 나서 exit 이걸로 해결한 경우라 잘 모르겠네요.
다만 임시파일 생성은 안 하고 바로 출력했습니다.
대략적인 코드는 아래와 같습니다.
$fileName = "result_s1";
require_once( G5_PLUGIN_PATH."/PHPExcel/Classes/PHPExcel.php");
$objPHPExcel = new PHPExcel();
~~ 엑셀 내용 ~~
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$fileName.'.xlsx');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$objWriter->save('php://output');
exit;
다만 임시파일 생성은 안 하고 바로 출력했습니다.
대략적인 코드는 아래와 같습니다.
$fileName = "result_s1";
require_once( G5_PLUGIN_PATH."/PHPExcel/Classes/PHPExcel.php");
$objPHPExcel = new PHPExcel();
~~ 엑셀 내용 ~~
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$fileName.'.xlsx');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007");
$objWriter->save('php://output');
exit;
답변을 작성하려면 로그인이 필요합니다.
한셀에서 열리면 excel에서 안 열리는 현상도 있어서, 한셀은 버리고 excel만 고려해서 했습니다.