写PHP网站的时候偶尔会遇到想下载其他网站上的图片到自己的网站上,这里自己整理了一个远程下载图片的PHP类,现在分享出来给大家:
downimg.php代码如下:
<?php class downImg { private $imgext = array(".gif",".png",".jpg",".bmp");//允许下载的图片后缀 public $saveImgUrl = ""; public $reText = ""; function __construct($url,$savedir="",$ext=".jpg") { try{ $imgContent = file_get_contents($url); if($savedir==""){ $savedir="../upfile/".date("Ym")."/".date("d")."/".date("H")."/"; } $this -> createFolder($savedir); $temext = substr(strrchr($url, '.'), 0); if(in_array($temext,$this->imgext)){$ext = $temext;} $savefile = $savedir.md5($url).$ext; $fp = @fopen($savefile,"a"); //将文件绑定到流 fwrite($fp,$imgContent); //写入文件 fclose($fp); $type = getimagesize($savefile); if($type==null || !is_array($type) || !isset($type["mime"]) || strpos($type["mime"], "image/")!=false){ if(file_exists($savefile)){ unlink($savefile); } $this -> reText = "图片下载失败,原因是目标文件非图片格式";return; }else{ switch($type["mime"]){ case "image/gif": if($ext !=".gif"){ if(rename($savefile,$savedir.md5($url).".gif"))$savefile = $savedir.md5($url).".gif"; } break; case "image/pjpeg": case "image/jpeg": case "image/jpg": if($ext !=".jpg"){ if(rename($savefile,$savedir.md5($url).".jpg"))$savefile = $savedir.md5($url).".jpg"; } break; case "image/png": case "image/x-png": if($ext !=".png"){ if(rename($savefile,$savedir.md5($url).".png"))$savefile = $savedir.md5($url).".png"; } break; case "image/bmp": if($ext !=".bmp"){ if(rename($savefile,$savedir.md5($url).".bmp"))$savefile = $savedir.md5($url).".bmp"; } break; default: if(file_exists($savefile)){ unlink($savefile); } $this -> reText = "图片下载失败,原因是目标文件非图片格式";return; break; } $this -> reText = "图片下载成功:{$savefile}"; $this -> saveImgUrl = $savefile; } } catch(Exception $e){$this -> reText ="图片下载失败,下载时出现未知错误";} } //创建目录函数 function createFolder($dir, $split = '/') { preg_match_all('/([^\/]+)\/?/', str_replace('\\', '/', trim($dir)), $matches); if (!empty($matches[1])) { $dir = '.'; $i = 0; $len = count($matches[1]); while (true) { if ($i >= $len) break; $dir .= $split . $matches[1][$i]; if (!is_dir($dir) && mkdir($dir, 0777)) @chmod($dir, 0777); $i++; } } return true; } } ?>
下面是实例演示:
<?php header("Content-type: text/html; charset=utf-8"); include './downimg.php'; $dw = new downImg("http://cambrian-images.cdn.bcebos.com/e32f05bcb4a68f541a83e411c2df71fb_1585381586475797.jpeg"); echo "图片下载成功后的地址:".$dw->saveImgUrl; ?>