我需要限制要下载的文件的大小,并尝试使用带有回调的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。还有其他方法可以应用限制吗?
谢谢!
答案 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
的值,看它是否大于目标大小。