Thinkphp6 远程图片下载
1、安装 GuzzleHttp ,如果已安装则可以忽略
composer require guzzlehttp/guzzle
2、完整代码
<?php
/**
* 远程抓取下载文件
* User: Holyrisk
* Date: 2025/5/7
* Time: 16:05
*/
namespace Holyrisk\download;
use GuzzleHttp\Client;
class DownloadHandle
{
/**
* @param $url 远程 URL
* @param $file_path 保存的文件路径
* @param $error_msg $msg 读取远程失败错误语
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public static function request($url,$file_path,$error_msg = '请求远程读取失败')
{
try{
$http = new Client([
'verify' => false,//绕过HTTPS证书校验
'headers' => [
'Content-type' => 'application/json',
]
]);
$repsone = $http->get($url);
$data = $repsone->getBody()->getContents();
if ($data !== false){
self::mkdirFile($file_path);
file_put_contents($file_path,$data);
}else{
throw new \Exception($error_msg);
}
}catch (\Exception $exception){
$msg = '下载失败:'.$exception->getMessage();
throw new \Exception($msg);
}
}
/**
* 图片
* @param $url 远程 图片 URL
* @param $file_path 保存的文件路径
* @return string
* @throws \GuzzleHttp\Exception\GuzzleException
*/
public static function img($url,$file_path)
{
try{
self::request($url,$file_path);
//返回响应的 下载路径
$root = app()->getRootPath().'public';
$return_path = ltrim($file_path,$root);
}catch (\Exception $exception){
throw new \Exception($exception->getMessage());
}
return $return_path;
}
/**
* 根据文件路径 创建 目录文件夹
* @param $file
* @param int $mode
* @return bool
*/
public static function mkdirFile($file,$mode = 0755)
{
$rsp = true;
$file_info = pathinfo($file);//dirname
if (is_dir($file_info['dirname']) == false){
$rsp = mkdir($file_info['dirname'],$mode,true);
}
return $rsp;
}
}3、测试
$url = 'http://gips0.baidu.com/it/u=1690853528,2506870245&fm=3028&app=3028&f=JPEG&fmt=auto?w=1024&h=1024';
//$url = 'https://www.trom.cn/UpFiles/Article/2025-03/20253118198999674.jpg';
$root = app()->getRootPath().'public';
$path = '/storage/test/'.date("Ymd",time());
//获取文件后缀
$extension = isset(pathinfo($url)['extension']) ? pathinfo($url)['extension'] : 'png';
//文件名称带后缀
$filename = uniqid().'.'.$extension;
//保存文件路径
$file_path = $root.$path.'/'.$filename;
$rsp = DownloadHandle::img($url,$file_path);
var_dump($rsp);测试通过OK