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 アクションに配置すると、動作が異なります (約 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 に答える