欢迎来到宝物袋网站,如果你有宝物想分享给大家的话,请联系我们。注册 | 登录

当前位置:首页 » php » 正文内容

PHP下载远程图片到本地,PHP下载网络图片方法

写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;
?>