ブラウザがファイルのダウンロードの進行状況を表示しない、php マネージド ファイルのダウンロードに問題があります。実際、ブラウザは、ファイルが完全にダウンロードされるまで、待ち続けているように見えます。ファイルはダウンロード リストに表示されます (chrome および firefox を使用)。IE8でファイルをダウンロードすることさえできません。ブラウザに実際のファイル サイズとダウンロードの進行状況を表示してほしい。
奇妙なことに、ダウンロードは firebug でも表示されません (ダウンロード URL を貼り付けると、ネットワーク タブに行が表示されません)。
圧縮/zlib に問題があるのではないかと疑ったので、両方を無効にしました。変更はありません。同じ結果で出力バッファリングを無効にしました。
実際の例はここにあります: http://vps-1108994-11856.manage.myhosting.com/download.php Phpinfo: http://vps-1108994-11856.manage.myhosting.com/phpinfo.php
コードは以下のとおりです。ご協力をお願いいたします。
<?php
$name = "bac.epub";
$publicname = "bac.epub";
@apache_setenv('no-gzip', 1);
ini_set("zlib.output_compression", "Off");
header("Content-Type: application/epub+zip");
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($name));
header("Content-disposition: attachment; filename=" . $publicname) );
ob_end_flush();
flush();
// dump the file and stop the script
$chunksize = 1 * (128 * 1024); // how many bytes per chunk
$size = filesize($name);
if ($size > $chunksize) {
$handle = fopen($name, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
ob_flush();
flush();
sleep(1);
}
fclose($handle);
} else {
readfile($name);
}
exit;
コード内のスリープは、ダウンロードが進行状況を確認するのに十分な長さであることを確認するためのものです。