下载通过标题在浏览器中可见的文件

时间:2016-03-21 18:32:04

标签: php curl

假设页面上显示的文件使用标题:

header("Content-Length: " . filesize($file) ); 
header("Content-type: application/pdf"); 
header("Content-disposition: inline");
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');

如何使用curl或file_get_contents或以任何其他方式从外部下载该文件?

我尝试了这个,但它下载了一个空文件:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_URL, $url); //specify the url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$head = curl_exec($ch);

header('Content-Disposition: attachment; filename="' . basename($url) . '"');
header("Content-Length: " . $url);
header("Content-Type: application/octet-stream");

我尝试使用file_get_contents(),但这可能是错误的方法。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

目前您只使用curl获取标题,而不是实际内容(正文)本身。

当您将其更改为

curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);

你将获取二进制内容(Content-disposition:inline应该没问题)

如果您现在想要为其他用户下载以前提取的文件,只需将其打印出来即可。

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_NOBODY, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_URL, $url); //specify the url
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$body = curl_exec($ch);

header('Content-Disposition: attachment; filename="EXAMPLE_FILE.txt"');
header("Content-Length: " . strlen($body));
header("Content-Type: application/octet-stream");

echo $body;