2

ブラウザがファイルのダウンロードの進行状況を表示しない、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;

コード内のスリープは、ダウンロードが進行状況を確認するのに十分な長さであることを確認するためのものです。

4

3 に答える 3

1

本当に、本当に、シンプルにしてください。

<?php

header("Content-Type: application/epub+zip");
header("Content-disposition: attachment; filename=" . $publicname) );

if(!readfile($name))    
    echo 'Error!';
?>

本当に必要なのはそれだけです。

于 2012-09-19T15:02:43.617 に答える
0

これは、ファイアウォールまたはユーザーとリモート サイト間の何らかのプロキシが原因である可能性があります。私は同じ問題に取り組んでいました-Web VPNで試して進行状況インジケーターが再表示されるまで、gzipを無効にしたり、バッファーをフラッシュしたりしました。

進行状況インジケーターにバグがあるとは思いません。コンテンツがユーザーに届く前に禁止されているだけで、ダウンロードの待機状態として表示されます。その後、コンテンツがスキャンまたは承認されると、サイトの通常のダウンロード速度に比べて非常に速くダウンする可能性があります. 十分な大きさのファイルの場合、この段階で進行状況インジケーターが表示されることがあります。

これがこの動作の本当の理由であるかどうかを判断する以外に、それについてできることは何もありません。

于 2015-04-13T23:49:07.103 に答える