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 回答