0

http://php.net/stream_copy_to_stream $maxlengthパラメータを使用すると、コピーするバイト数を制限できます。

制限に違反したかどうかを確認する方法。ファイル全体がダウンロードされたのではありませんか?

4

1 に答える 1

0

Yousuf Memon のコメント (http://mattgemmell.com/2008/12/08/what-have-you-tried/) に関しては、この問題に対する私のアプローチは単純な論理です。

public function download($size_limit)
{
    if($this->temp_file)
    {
        throw new UploadRemoteImageException('Resource has been downloaded already.');
    }

    $this->temp_file    = tempnam(sys_get_temp_dir(), $this->temp_file_prefix);

    $src    = fopen($this->url, 'r');
    $dest   = fopen($this->temp_file, 'w+');

    stream_copy_to_stream($src, $dest, $size_limit+1000);

    if(filesize($dest) > $size_limit)
    {
        // The file size limit has been breached.
    }

    // [..]
}

これは、ユーザー定義の制限の上にさらにバイトを追加するだけで機能します。次に、ストリームが閉じられると、ファイルがユーザー定義のサイズ制限よりも大きいかどうかがチェックされます (これは、1000 バイトを上に追加したことが原因である可能性があります)。

ただし、チャンクサイズにも依存すると想定しているため、これが常に機能するかどうかは自信を持って言えません。

于 2012-11-16T01:10:29.610 に答える