次のように、ダウンロードダイアログをトリガーする小さなスクリプトを作成しました。
<?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 秒後にダウンロード ダイアログがポップアップします)。
この違いはなぜですか?