$fileService = FileService::downLoadNetWorkFile($img);
1.php完美实现下载远程图片保存到本地:
/**
* php完美实现下载远程图片保存到本地
* 参数:文件url,保存文件目录,保存文件名称,使用的下载方式
* @param $url
* @param string $save_dir
* @param string $type
* @return mixed
* @throws ParameterException
* @author: deng (2019/4/24 11:36)
*/
public static function downLoadNetWorkFile($url, $save_dir = '',$type = '0')
{
if (empty($url)) throw new ParameterException('图片地址不能为空!');
if (empty($save_dir)) $save_dir = './';
// 获取文件后缀 eg: .png
$ext = strrchr($url, '.');
if ($ext != '.png' && $ext != '.jpg' && $ext != '.gif') {
// 图片路径不是正常格式时,默认png
$file_name = 'wx-'.time().mt_rand(1000,9999).'.png';
} else {
$file_name = time().mt_rand(1000,9999).$ext;
}
if(0!==strrpos($save_dir,'/')){
$save_dir.='upload/'.date('Ymd').'/';
}
// 创建保存目录
if(!file_exists($save_dir)&&!mkdir($save_dir,0777,true)){
throw new ParameterException('没有上传图片的权限');
}
$result = self::downFile($url, $save_dir, $file_name, $type);
return $result;
}
2.获取远程文件所采用的方法:
/**
* 获取远程文件所采用的方法
* @param $url
* @param $save_dir
* @param $filename
* @param string $type
* @return array
* @author: deng (2019/4/24 14:38)
*/
private static function downFile($url, $save_dir, $filename, $type = '0')
{
if($type){
$ch=curl_init();
$timeout=5;
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,$timeout);
$img=curl_exec($ch);
curl_close($ch);
}else{
ob_start();
readfile($url);
$img=ob_get_contents();
ob_end_clean();
}
$size=strlen($img);
//文件大小
$fp2=@fopen($save_dir.$filename,'a');
fwrite($fp2,$img);
fclose($fp2);
unset($img,$url);
$result = [
'file_size' => $size,
'file_name' => $filename,
'save_path' => $save_dir.$filename,
'address' => $save_dir.$filename
];
return $result;
}