很简单,我正在尝试从 CakePHP 控制器生成和下载 CSV 文件。生成 CSV 没有问题,一切正常,直到响应 >= 4096 字节。
下面的控制器说明了这个问题:
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/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
当我调用http://baseurl/test_type/csv/4096
时,文件被打印到屏幕上,响应头是:
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-Encoding 开始压缩响应的限制。我不熟悉 Content-Type 的反应方式,但我显然更希望它保留text/csv。
RequestHandlerComponent
使用管理响应的类型也会出现同样的问题。
我正在使用 CakePHP 2.2.0-RC1,但我已经验证了稳定的 2.1.3 存在问题。有任何想法吗?指向正确方向的指针?