PHP实现文件下载的两种方式分别使用GuzzleHttp扩展和Curl扩展来实现。本例以下载PDF文件为例,实际上大家可以举一反三下载其他文件格式是一样的。
1、使用GuzzleHttp 扩展库
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
//远程文件路径
$remoteFileUrl="http://www.gov.cn/zhengce/pdfFile/2021_PDF.pdf";
//本地存储路径绝对地址
$saveFilePath=__DIR__ . "/test_download.pdf";
try {
$pdfFileResource = fopen($saveFilePath, 'w+');
$httpClient = new Client();
$response = $httpClient->get(
$remoteFileUrl,
[RequestOptions::SINK => $pdfFileResource]
);
if ($response->getStatusCode() === 200) {
echo "下载成功:".$saveFilePath;
}
echo "下载失败";
}catch (\Throwable $e){
var_dump($e->getMessage());
}
?2、使用 CURL 扩展库
//远程文件路径
$remoteFileUrl = "http://www.gov.cn/zhengce/pdfFile/2021_PDF.pdf";
//本地存储路径绝对地址
$saveFilePath = __DIR__ . "/test_download.pdf";
$curlHandler = curl_init();
curl_setopt_array($curlHandler, [
CURLOPT_URL => $remoteFileUrl,
CURLOPT_FILE => fopen($saveFilePath, 'w+')
]);
curl_exec($curlHandler);
if (curl_errno($curlHandler) === CURLE_OK) {
echo '文件已经成功下载: ' . $saveFilePath;
}
curl_close($curlHandler);
如果使用Bash 命令行测试可以使用如下格式: (curl 原地址 --output 存储目标地址)
curl?http://www.gov.cn/zhengce/pdfFile/2021_PDF.pdf --output test.pdf
|