1

ここでの私の機能では、特定のマイルストーンを過ぎてファイルがダウンロードされたときに機能を実行しようとしています。したがって、この例では、10MB をダウンロードしてマイルストーンをエコーし​​、次の 10MB まで繰り返します。

ダウンロードしているファイルは約 300MB なので、関数は 30 回呼び出されると予想されます。

マイルストーンは何にする必要がありますか? バイト?キロバイト?それが何であれ、約 10000 を超えると、if 内で何も呼び出されなくなります。

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $chunk) {
$chunksize = strlen($chunk);
$downloaded .= $chunksize;
if($downloaded > $milestone){
    echo "milestone";
    $downloaded = 0;
}
return $chunksize;
});
4

1 に答える 1

0

$downloaded本当の問題は、変数と$milestoneがこの関数のスコープ内にないこと、および/または関数が実行されるたびにリセットされることだと思います。おそらく、周囲のスコープから作成$downloaded staticして含めることをお勧めします。$milestone

$milestone = /* something */;

curl_setopt($ch, CURLOPT_WRITEFUNCTION, function ($ch, $chunk) use ($milestone) {
    static $downloaded = 0;

    $chunksize = strlen($chunk);
    $downloaded .= $chunksize;
    if ($downloaded > $milestone){
        echo "milestone";
        $downloaded = 0;
    }
    return $chunksize;
});
于 2012-08-05T19:35:08.357 に答える