2011-11-07 18 views
1

私は特定のユーザのファイルダウンロードのためのPHPコードを持っています 私はデータベースにファイルの内容を保存しています(ブロブタイプを使用しています)。複数の接続を持つPHPダウンロードスクリプト

<?php 
//do stuffs to validate user 
//do stuffs get the content from database; 
//$r=mysql_fetch_object("$query"); 
header("Content-Type: $r->type"); 
header("Content-Disposition: attachment; filename=\"$r->name\""); 
echo $r->content; 
?> 

大きなファイルの場合、ファイルのダウンロードに時間がかかります。 コードを改善するには? 複数の接続でダウンロード速度が向上しましたか?

+0

詳細。助けが必要な場合は、それらを与えてください。あなたはどんなスピードですか?どのくらい大きなですか?どのような接続の上に? –

+1

スピードアップについては実際にはコメントできませんが、 'Content-Length'ヘッダを指定すると、受信ユーザはステータスバーと到着予定時刻を知ることができます(速く感じるかもしれません)。 – Rudu

答えて

0

この特定のプロセスをスピードアップするためにできることはあまりありません。

サーバーとクライアントの帯域幅はハード制限値です。 PHPを介してファイルをストリーミングすると、オーバーヘッドが発生しますが、データがデータベースから取得されているので、それを改善する簡単な方法はありません。

帯域幅の大きい高速なサーバーに移動すると問題が発生する可能性がありますが、そうでない場合もあります。クライアントの接続が遅い場合は、何もできません。

1

接続に人為的な制限がないと仮定すると、HTTP転送は可能な限り多くのネットワークパイプを占有します。

Rapidshareのようなファイルダウンロードサイトで接続が制限を受けるようになると、「無料」ユーザーの帯域幅が制限されるため、パラレル接続を使用すると速度が向上する可能性があります。例えば1つのストリームは50k/sに制限されているので、2ストリームを開くと100k/sの効果が得られます。

しかし、あなたは遠隔ダウンロードをサポートする必要があります。あなたのスクリプトは、最初から最後までファイル全体を送ります。したがって、ユーザーはファイル全体を2回ダウンロードします。