カスタム ヘッダーをプッシュする前に何も出力できないため、JS を使用してダウンロードにリダイレクトすることをお勧めします。これにより、通常は同じページに留まります (zip コンテンツを破棄するだけで他には何もない限り)。
だから、これを試してください:
$download = 'example.zip';
echo '<head> <script type="text/javascript"> function doRedirect(){window.location = "'.$download.'"}</script>
</head><html><script type="text/javascript"> doRedirect() </script> <...Example web page...</html>';
または、タイマーが必要な場合:
echo '<head> <script type="text/javascript"> function doRedirect(){window.location = "'.$download.'"}</script>
</head><html><script type="text/javascript">
setTimeout(doRedirect(),1000);//wait one second</script> <...Example web page...</html>';
編集:
ファイル パスを隠したい場合は、JS がリダイレクトするダウンロード スクリプトを作成することをお勧めします。
したがって、基本的には、自分が行っていることを正確に実行してから、JS を使用してそれを指すようにします。このような:
ダウンロード.php:
//use an ID or something that links to the file and get it using the GET method (url params)
$downloadID = $_GET['id'];
//work out the download path from the ID here and put it in $download
if ( $downloadID === 662 )
{
$download = 'example.zip';//...
}
header('Content-Type: application/zip');
header('Content-Disposition: attachment; filename=$download');
readfile($download);
次に、メインの HTML ファイルで、JS を使用して、正しい ID でそれをポイントします。
<head> <script type="text/javascript"> function doRedirect(){window.location = "Download.php?id=662"}</script>
</head><html><script type="text/javascript"> doRedirect() </script> <...Example web page...</html>