PHP curl_multi - 如何限制文件

时间:2016-06-28 23:57:53

标签: php curl

我需要限制要下载的文件的大小,并尝试使用带有回调的CURLOPT_PROGRESSFUNCTION选项检查下载的大小,并以超过1kb的方式停止:

$progress_handler = function( $download_size, $downloaded, $upload_size, $uploaded ) {
    return ( $downloaded > 1024 ) ? 1 : 0;
}

curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, $progress_handler);

我在几个网站上测试了这个,下载大小在~100kb,但似乎没有停在1kb。还有其他方法可以应用限制吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

这有效:

<?php

$url = 'https://example.com/file';

$ch = curl_init($url);

$bytes = 0;

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_NOHEADER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, function($ch, $data) use(&$bytes) {
    static $size = 0;

    //echo $data;

    $size += strlen($data);

    $bytes = $size;

    if ($size > 1024) {
        return -1;
    }
    return strlen($data);
});

$res = curl_exec($ch);

echo "Got $bytes bytes\n";

概念是使用CURLOPT_WRITEFUNCTION从响应主体接收数据并增加函数本地的静态计数器。一旦字节数超过1024,返回-1以中止传输。回调和程序之间共享一个值,因此您可以在传输后检查$bytes的值,看它是否大于目标大小。