2012-06-05 2 views
0

간단히 말해 CakePHP 컨트롤러에서 CSV 파일을 생성하고 다운로드하려고합니다. CSV를 생성하는 데 아무런 문제가 없으며 모든 것이 4096 바이트 이상의 응답까지 작동합니다.응답이 커질 때 CakePHP에서 Content-Type 설정

다음 컨트롤러는 문제를 보여

class TestTypeController extends Controller { 
    public function csv($size = 100) { 
    # set the content type 
    Configure::write('debug', 0); 
    $this->autoRender = false; 
    $this->response->type('csv'); 
    # send the response 
    for ($i = 0; $i < $size; $i++) 
     echo 'x'; 
    } 
} 

내가 http://baseurl/test_type/csv/4095 전화

, 내가 파일을 저장하라는 메시지가있어, 그리고 Content-Type 헤더는 text/csv입니다. 내가 http://baseurl/test_type/csv/4096를 호출 할 때

HTTP/1.1 200 OK 
Date: Tue, 05 Jun 2012 14:28:56 GMT 
Server: Apache/2.2.22 (Ubuntu) 
X-Powered-By: PHP/5.3.10-1ubuntu3.1 
Content-Length: 4095 
Keep-Alive: timeout=5, max=98 
Connection: Keep-Alive 
Content-Type: text/csv; charset=UTF-8 

이 파일을 화면에 인쇄되고, 응답 헤더는 다음과 같습니다 : 응답 헤더는 콘텐츠 인코딩 Gzip으로 압축 시작되는 분명히

HTTP/1.1 200 OK 
Date: Tue, 05 Jun 2012 14:28:53 GMT 
Server: Apache/2.2.22 (Ubuntu) 
X-Powered-By: PHP/5.3.10-1ubuntu3.1 
Vary: Accept-Encoding 
Content-Encoding: gzip 
Content-Length: 38 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

, 4kB의 한계입니다 응답. 나는 Content-Type이 반응하는 방법에 익숙하지 않지만, 분명히 남아 있기를 바란다. text/csv.

RequestHandlerComponent을 사용하여 응답 유형을 관리 할 때도 동일한 문제가 발생합니다.

저는 CakePHP 2.2.0-RC1을 사용하고 있습니다. 그러나 stable 2.1.3에 문제가 있는지 확인했습니다. 어떤 아이디어? 올바른 방향의 포인터?

+0

나는 찌르고, Cake가 콘텐츠 길이에 따라 헤더를 변경하는 것을 보지 못한다. 아파치 구성 문제일지도 모릅니다. 이 링크를 확인하고 설정이 유형을 추가/변경하는지 확인하십시오. http://httpd.apache.org/docs/2.0/mod/mod_deflate.html – jeremyharris

답변

2

대답은 매우 간단합니다. 컨트롤러는이를 반향하는 대신 CSV 데이터를 반환해야합니다.