1

我构建了一个小脚本来触发下载对话框,如下所示:

<?php
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.'123.txt');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');

ob_end_clean();
echo ' '; 
flush();

//do something long
//for example
sleep(5);
for($i = 0; $i<10; $i++){
echo $i . PHP_EOL;
sleep(1);             
}

如果我将它放入一个名为 download.php 的文件中,它会正常运行;立即弹出下载对话框。

如果我将它放入 Zend Framework Action 并禁用布局和视图渲染,它的行为会有所不同(大约 15 秒后会弹出下载对话框)。

为什么会有这种差异?

4

1 回答 1

1

Zend Framework 处理一个动作的输出,并会添加额外的头文件并可能覆盖头文件。

 // Disable default phtml rendering
 $this->_helper->viewRenderer->setNoRender(true);
 $response->clearAllHeaders();

对于 ZF1,我们使用此行来关闭视图的正常渲染以允许下载工作。

于 2013-01-16T13:15:14.820 回答