php - 如何使用 cURL 部分下载远程文件?

标签 php curl

是否可以使用 cURL 部分下载远程文件? 比方说,远程文件的实际文件大小是 1000 KB。 我怎样才能只下载它的前 500 KB?

最佳答案

您还可以使用 php-curl 扩展设置范围 header 参数。

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.spiegel.de/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
echo $result;

但如前所述,如果服务器不接受此 header 但发送整个文件,curl 将下载所有文件。例如。 http://www.php.net忽略标题。但是您可以(另外)设置一个写入函数回调并在收到更多数据时中止请求,例如

// php 5.3+ only
// use function writefn($ch, $chunk) { ... } for earlier versions
$writefn = function($ch, $chunk) { 
  static $data='';
  static $limit = 500; // 500 bytes, it's only a test

  $len = strlen($data) + strlen($chunk);
  if ($len >= $limit ) {
    $data .= substr($chunk, 0, $limit-strlen($data));
    echo strlen($data) , ' ', $data;
    return -1;
  }

  $data .= $chunk;
  return strlen($chunk);
};

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.php.net/');
curl_setopt($ch, CURLOPT_RANGE, '0-500');
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
curl_setopt($ch, CURLOPT_WRITEFUNCTION, $writefn);
$result = curl_exec($ch);
curl_close($ch);

关于php - 如何使用 cURL 部分下载远程文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2032924/

相关文章:

php - 客户端-服务器架构决策

php - SQLSTATE[42000] : Syntax error or access violation: 1064 You have an error in your SQL syntax [Php PDO]

php file_get_contents($url) & 变成 &

php - 如何使用 curl_setopt() 将提供的带有内联参数的单行 cURL 代码转换为格式

php - 如果使用 cURL 或 Wget 访问页面,则在 PHP 中检测

php - 如何为 PHP 全局设置 CURLOPT_CAINFO?

php - CodeIgniter:格式化 mysql DATETIME 字段 dd/mm/yy hh:mm

php - 如何仅从 mysql PDO 选择查询中的时间戳中选择时间?

php - Doctrine 生成实体命名空间问题?

bash - wget 保持 session 等效 curl