php - 使用 CURL 下载时使用默认文件名 (content_disposition)

标签 php curl

我正在尝试使用 PHP 和 CURL 下载一些文件,但我没有看到使用默认建议文件名(在 HTTP 响应 header 中为

Content-Disposition:附件;文件名=foo.png

)。有没有更简单的方法然后获取完整的 header 、解析文件名并重命名?

最佳答案

<?php
$targetPath = '/tmp/';
$filename = $targetPath . 'tmpfile';
$headerBuff = fopen('/tmp/headers', 'w+');
$fileTarget = fopen($filename, 'w');

$ch = curl_init('http://www.example.com/');
curl_setopt($ch, CURLOPT_WRITEHEADER, $headerBuff);
curl_setopt($ch, CURLOPT_FILE, $fileTarget);
curl_exec($ch);

if(!curl_errno($ch)) {
  rewind($headerBuff);
  $headers = stream_get_contents($headerBuff);
  if(preg_match('/Content-Disposition: .*filename=([^ ]+)/', $headers, $matches)) {
    rename($filename, $targetPath . $matches[1]);
  }
}
curl_close($ch);

我最初尝试使用 php://memory而不是 /tmp/headers,因为对这种事情使用临时文件是草率的,但出于某种原因我无法让它工作。但至少你明白了......

或者,您可以使用 CURLOPT_HEADERFUNCTION

关于php - 使用 CURL 下载时使用默认文件名 (content_disposition),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2072643/

相关文章:

php - 从 iis7 中的 wordpress URL 中删除 index.php

javascript - 更新页面内容 cURL 和 ajax,无需刷新页面

java - 如何在执行前获取processbuilder命令

javascript - 使用 AJAX 从另一个网站获取数据

python - 调用 github api 时发送经过身份验证的请求以获得更大的限制

php - 在发送之前预览 CURL 请求

javascript - 防止一段 html 引用同一页面上的其他标签/元素

php - 将此数组更改为一维数组的最简单方法是什么

javascript - 如果 json_encode 返回已经是 JSON 的 api 数据会发生什么

javascript - PHP代码执行并防止未经授权的外部访问执行