서버 이전 후 excel 출력시 파일 손상 및 지원하지 형식 오류

서버 이전 후 excel 출력시 파일 손상 및 지원하지 형식 오류

QA

서버 이전 후 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

https://m.blog.naver.com/PostView.nhn?blogId=pcgun70&logNo=220785706494&proxyReferer=https:%2F%2Fwww.google.com%2F

 

찾아보니 위와 같은 경우도 있네요.

 

다른 부분들은  phpexcel 예제 파일 참고하시구요.

https://github.com/PHPOffice/PHPExcel/blob/1.8/Examples/01simple-download-xlsx.php

phpexcel 서버에 저장시킨 후 파일을 불러와 다운받게 하는 형식으로 다시 수정을 했네요.
한셀에서 열리면 excel에서 안 열리는 현상도 있어서, 한셀은 버리고 excel만 고려해서 했습니다.

phpexcel 사용중이라면

마지막에 부분에 exit; 넣어보세요.

 

~~~

exit;

?>

 

 

음.. 저도 최근에 파일 손상 및 지원하지 형식 오류 가 나서 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;

저도 정상적으로 저장은 되지만 한셀에서는 열리는데 ms-office 에서는 안열리는데
구글 여기 저기 찾아 보니 common 파일 중에 한줄 띄어 쓰기가 생기면 오류가 
발생하는 걸 알았습니다.

include 된 php 파일중에

<?php  위에  한줄 띄기쓰기가 있거나 공백이 있으면 안되고
?>  마지막 뒤에 공백이나 한줄 띄어쓰기가 있으면 오류가 발생하네요

파일 전부 수정하니 정상적으로 열리네요

 

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel5"); 이건 안되고

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, "Excel2007"); 이건 되네요

음...

일단 이렇게 처리를 하고 문제가 생기면 서버에 엑셀을 해서 다운로드 되는 방식으로 해야겠네요

답변을 작성하시기 전에 로그인 해주세요.
전체 123,126 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT