2011-01-22 4 views
0

私は、ファイルをダウンロードするためにphpを使ってプログラムを作成しています。 スクリプト要求が似ている:http://localhost/download.php?file=abc.zip私はResumable downloads when using PHP to send the file?300Mを超えるダウンロードを再開できない

で述べたいくつかのスクリプトが、それは間違いなく私は、ファイル> 300Mをダウンロードしようとすると、私が得る、マルチスレッドまたはシングルスレッドのダウンロードのいずれか、300M下のファイルに対して動作しますが、使用 シングルスレッドのダウンロードで問題が発生しました。私は250Mのデータしかダウンロードしていませんでしたが、http接続が壊れているようです。 ブレークポイント ..なぜですか? それが壊れどこスクリプトのデバッグ、私はピンポイント:私は、ファイルをダウンロードするには、マルチスレッドを使用する場合、それは動作します..But

$max_bf_size = 10240; 
$pf = fopen("$file_path", "rb"); 
fseek($pf, $offset); 
while(1) 
{ 
    $rd_length = $length < $max_bf_size? $length:$max_bf_size; 
    $data = fread($pf, $rd_length); 
    print $data; 
    $length = $length - $rd_length; 
    if($length <= 0) 
    { 
     //__break-point__ 
     break; 
    } 

} 

これは、すべての要求されたドキュメントのように思えるのみechoまたはprintに250Mデータバッファを取得することができます

答えて

0

fread()は要求するバイト数まで読み込み、読み込むバイト数を計算するいくつかの不必要な作業をしています。私はシングルスレッドとマルチスレッドのダウンロードが何を意味するのか分かりません。ファイル全体をダンプするreadfile()について知っていますか? $ offsetから$ lengthバイトまでのファイルの一部を読む必要があると思いますか?

また、私のWebサーバー(Apache?)の構成とISPの制限もチェックしたいと思います。最大応答サイズまたは時間が制限される可能性があります。

これを試してみてください:

define(MAX_BUF_SIZE, 10240); 
$pf = fopen($file_path, 'rb'); 
fseek($pf, $offset); 
while (!feof($pf)) { 
    $data = fread($pf, MAX_BUF_SIZE); 
    if ($data === false) 
     break; 
    print $data; 
} 
fclose($pf); 
関連する問題