테스트 사이트 - 개발 중인 베타 버전입니다

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

masters 5년 전 조회 6,281

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개

채택된 답변
+20 포인트
5년 전
로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

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

댓글을 작성하려면 로그인이 필요합니다.

2년 전

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

include 된 php 파일중에

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

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

 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

m
5년 전

이게 한셀은 열리는데 Excel 프로그램에서 안 열리네요;;;;;;;

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

m
5년 전

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

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

음...

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

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

5년 전

phpexcel 사용중이라면

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

 

~~~

exit;

?>

 

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 2개

m
masters
5년 전
일단 저는 class.writeexcel_workbook라이브러리를 사용하고 있고,
혹시 몰라서 PHPExcel 라이브러리로 해서 테스트를 해도 똑같은 오류가 발생합니다.
뽁스
5년 전
음.. 저도 최근에 파일 손상 및 지원하지 형식 오류 가 나서 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;

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인