2012-02-05 16 views
0

Google検索で見つかった基本的なものを試してみましたが、自分でも書き込もうとしましたが、問題は続いています。コンテンツサーバー側などをダウンロードして、それをユーザーにプッシュしているように見えます。既にダウンロードされています。それはダウンロードページを開き、ダウンロードするのに約10秒かかり、次にユーザーにファイルを渡すと、ダウンロードされていないように見えます。PHPでダウンロード速度を調整する

ダウンロードの速度を調整するために作成されたクラスがあるか、この問題をどのように修正できるか疑問に思っていました。

私はこれを現在持っています。

header("Content-type: application/force-download"); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-length: ".filesize("uploads/$filename")); 
    header("Content-disposition: attachment; filename=\"$origname"); 
    readfile("uploads/$filename"); 

ありがとうございます!

+0

重複。これをチェックアウトhttp://stackoverflow.com/questions/4002106/limit-download-speed-using-php – Drahkar

+0

はい、私はその別の問題を抱えています – HarryBeasant

答えて

5
@set_time_limit(0); // don't abort if it takes to long 
header("Content-type: application/force-download"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-length: ".filesize("uploads/".$filename)); 
header('Content-disposition: attachment; filename="'.$origname.'"'); 
$perSecond = 5; // 5 bytes per second 

$file = fopen("uploads/".$filename, 'r'); 
while(!feof($file)) { 
    echo fread($file, $perSecond); 
    flush(); 
    sleep(1); 
} 

これにより、ダウンロード速度が低下したファイルがユーザーに送信されます。それはこのように、基本的に動作します:

  • 開き、我々は最後になるまでファイル
  • ループ
  • エコーXバイト
  • フラッシュ
  • 睡眠1秒のためにユーザに出力します。
+0

私はそれが現在どのように見えるかを追加しました。これをどのように統合しますか? – HarryBeasant

+0

@HarryBeasantあなたのファイル名(もちろんperSecondも含む)でスニペット内のスニペットとfile.txtに読み込みファイルを置き換えるだけです。編集:私はちょうど私の回答を更新しました – TimWolla

+0

それは、ダウンロードサーバー側を処理している問題ですそれをブラウザにプッシュします。ダウンロードすることはできません。 – HarryBeasant

0

アルファステージBandwidth興味のあるプロジェクトが見つかりました。おそらくもう少し作業が必要ですが、すでに面白いものがたくさんあります。私はそれがまだF/OSSライセンスを持っているとは思わない。あなたが私にそれを与えることを望むなら、私にpingしてください!

0

私は

スロットルダウンロード速度に書き込まれたすべてのクラスがある場合は今そこにあると思いまして:bandwidth-throttle/bandwidth-throttle

use bandwidthThrottle\BandwidthThrottle; 

$in = fopen(__DIR__ . "/resources/video.mpg", "r"); 
$out = fopen("php://output", "w"); 

$throttle = new BandwidthThrottle(); 
$throttle->setRate(100, BandwidthThrottle::KIBIBYTES); // Set limit to 100KiB/s 
$throttle->throttle($out); 

stream_copy_to_stream($in, $out); 
関連する問題