symfony에서 모든 유형의 파일을 포함하는 zip 아카이브를 보낼 때 이상한 동작이 발생합니다. 문제는 브라우저에서 다운로드 한 zip 파일에 파일의 시작 부분에 '비트'가 추가로 포함되어 있다는 것입니다. 이제 여기에 이상한 무엇php symfony의 setContent() 이후에 손상된 ZipArchive
$tmpFileName = tempnam("/tmp", "xb_");
$zip = new ZipArchive();
$zip->open($tmpFileName, ZipArchive::CREATE);
$zip->addFile('[directory_inside_webspace]/test.pdf', 'myTest.pdf');
$zip->close();
$this->getResponse()->clearHttpHeaders();
$this->getResponse()->setContent(file_get_contents($tmpFileName));
$this->getResponse()->setHttpHeader('Content-Type', 'application/zip');
$this->getResponse()->setHttpHeader('Content-Disposition', 'attachment; filename=archive.zip');
return sfView::NONE;
:
여기 내 코드입니다./tmp 아래의 임시 zip 파일은 정상입니다. 아무 문제없이 추출 할 수 있습니다. 그러나 브라우저가 전송 한 파일이 손상되었습니다. 내가 문제없이 열 수 있습니다 손상된 파일 추가 '0A'를 제거하면
working file: 50 4B 03 04 14 00 00
corrupt file: 0A 50 4B 03 04 14 00 00
: 나는 헥스 편집기에서 모두 열 때, 처음 몇 바이트는 다음과 같다. 이제는/tmp에 작성된 tmp 파일과 정확히 동일한 파일입니다.
누구나 전에 이런 행동이 있었습니까 ?? 4 일 넘게이 문제에 갇혀 있고 오류를 찾을 수 없습니다. 다른 심포니 모듈에서 똑같은 코드를 사용하고 있습니다. 어떤 아이디어?
----- 업데이트는 ------
문제는 zipArchive 또는의 setContent 관련되지 않았습니다. 함수의 시작 부분에 쿼리가있었습니다. 내 교리 모델의 클래스 'Bill.class.php'에서
$bill = Doctrine::getTable('Bill')->find($request->getParameter('id'));
나는 클래스 빌은 새로운 라인이 화면하기 인쇄했다 인스턴스화 그래서 때
<?php
전에 빈 줄을했다.
필자는 zip 보관소를 브라우저에 보낼 때 '헤더가 이미 전송 됨'과 같은 오류 메시지를 표시하지 않는 이유가 궁금합니다.
고마워요, 제 문제였습니다! – cb0