서버 이전 후 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개
찾아보니 위와 같은 경우도 있네요.
다른 부분들은 phpexcel 예제 파일 참고하시구요.
https://github.com/PHPOffice/PHPExcel/blob/1.8/Examples/01simple-download-xlsx.php
답변에 대한 댓글 1개
댓글을 작성하려면 로그인이 필요합니다.
저도 정상적으로 저장은 되지만 한셀에서는 열리는데 ms-office 에서는 안열리는데
구글 여기 저기 찾아 보니 common 파일 중에 한줄 띄어 쓰기가 생기면 오류가
발생하는 걸 알았습니다.
include 된 php 파일중에
<?php 위에 한줄 띄기쓰기가 있거나 공백이 있으면 안되고
?> 마지막 뒤에 공백이나 한줄 띄어쓰기가 있으면 오류가 발생하네요
파일 전부 수정하니 정상적으로 열리네요
댓글을 작성하려면 로그인이 필요합니다.
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5"); 이건 안되고
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 이건 되네요
음...
일단 이렇게 처리를 하고 문제가 생기면 서버에 엑셀을 해서 다운로드 되는 방식으로 해야겠네요
댓글을 작성하려면 로그인이 필요합니다.
답변에 대한 댓글 2개
혹시 몰라서 PHPExcel 라이브러리로 해서 테스트를 해도 똑같은 오류가 발생합니다.
다만 임시파일 생성은 안 하고 바로 출력했습니다.
대략적인 코드는 아래와 같습니다.
$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만 고려해서 했습니다.