ダウンロードの問題。小さいファイルは正常にダウンロードされますが、100M を超えるファイルをダウンロードすると、100M を超えると進行状況バーの動きが停止します。コードの何が問題ですか?
この投稿は bxline によって最終編集されました: 2012-12-17 06:31:43
次のコードを使用しました。2 回試しましたが、ダウンロードが 145M に達すると実行が停止し、129M に達すると実行が停止しました。
、 どうしたの?小さいファイルは正常にダウンロードされますが、100M を超えるファイルは正しくダウンロードされません
以下はコードです: 私は Apache ではなく 03+FASTCGI なので、コード内のいくつかの行がコメントアウトされています
if(file_exists($filename)){
$mtime = ($mtime = filemtime($filename)) $mtime : gmtime();
$size = intval(sprintf("%u", filesize($filename)));
#if (intval($size + 1) > return_bytes(ini_get('memory_limit')) && intval($size * 1.5)
# ini_set('memory_limit', intval($size * 1.5));
#}
//@apache_setenv('no-gzip', 1);
//@ini_set('zlib.output_compression', 0);
header('Content-Description: ファイル転送');
header('Content-Type: application/force-download');
Header('Content-Type: application/octet-stream');
Header('Content-Disposition:attachment; filename='.basename($filename));
Header('コンテンツ転送エンコーディング: バイナリ');
Header('有効期限: 0');
Header('キャッシュ制御: 必須再検証、事後チェック=0、事前チェック=0');
header('Pragma: public');
header("Content-Length: " . $size);
set_time_limit(300);
$chunksize = 1 * (1024 * 1024);
// ob_clean();
//flush();
if ($size > $chunksize) {
$handle = fopen($filename, 'rb');
$buffer = '';
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
エコー $バッファ
Ob_flush();
フラッシュ();
}
fclose($handle);
} else {
ob_flush();
フラッシュ();
Readfile($ファイル名);
}
終了;
}
------解決策---------
echo 100 * 1024 / 300;
341 K/秒を獲得しました
つまり、平均帯域幅は 3M 以上である必要があります
ダウンロード コードには、送信エラーが発生するとダウンロードを再開する機能がありません。
-----解決策-------------- -- ----
書いてみようかな、見てみてね
関数ダウン($file){
IF(!$file または !File_Exists($file) または !Is_Readable($file)) {Return False;}
IF($f = atr($file)) {
Header("Content-Length:{$f['size']}");
Header('Content-Description:ファイル転送');
Header('Content-Transfer-Encoding:binary');
Header('有効期限:0');
Header('Cache-Control:must-revalidate');
Header('Pragma:public');
IF(Function_exists("mime_content_type")) {
Header("Content-Type: ".mime_content_type($f['name']));
}その他{
Header("Content-Type: application/octet-stream");<br><br>
ログイン後にコピー