PHP根据图片路径下载线上图片
昨天晚上客户让把他网站上的产品图片都下载下来,虽然心里对这需求有些看不懂,但既然客户有需求,我们就得照做,没办法,谁让我们是苦逼的码农呢。
初看需求,有些茫然,毕竟之前没有接触过这种,但想了一下,觉得似乎也不难,于是就花时间理了一下思路,主要分为以下几步:
第一步:连接图片所在数据库;
第二步:查出所有需要的数据;
第三步:匹配查找线上图片;
第四步:在本地新建一个文件夹;
第五步:将查找出的图片存进目标文件夹;
具体代码如下:
<?php /** * Created by PhpStorm. * User: Administrator * Date: 2020/4/8 0008 * Time: 下午 2:10 */ header('Content-type:text/html;charset=utf-8'); //数据库连接 date_default_timezone_set('Asia/Shanghai'); $dbms='mysql'; //数据库类型 $host='127.0.0.1'; //数据库主机名 $dbName='enke'; //使用的数据库 $user='root'; //数据库连接用户名 $pass='root'; //对应的密码 $dsn="$dbms:host=$host;dbname=$dbName"; try { $dbh = new PDO($dsn, $user, $pass, array()); //初始化一个PDO对象 //PDO是连接数据库的方法,其内依次放置 ,用户名,密码,展现格式 } catch (PDOException $e) { die ("Error!: " . $e->getMessage() . "<br/>"); } //处理抛出的异常 ini_set('max_execution_time', '0'); //连接网络 function curl_get($url, &$httpCode = 0) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //不做证书校验,部署在linux环境下请改为true curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); $file_contents = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); return $file_contents; } //查出所有值 $sql= $dbh->query("SELECT * FROM `enke`.`ydj_product`")->fetchAll(); foreach ($sql as $value) { $pic = $value['SmallPic'];//图片路径 $name = ($value['Name']);//图片名 // print_r($pic.'---'.$name.'<br>'); $image = curl_get('http://目标域名/UploadFile/ProSmall/'.$pic);//查找线上图片,参数为线上图片完整路径名(域名后的文件夹路径只为演示用,实际应用时请换成自己的文件夹路径) file_put_contents('/enke_img/'.$name.'.jpg',$image);//存进目标文件夹,我这里设的目标文件夹名为enke_img,这里默认图片都是jpg格式的,如果需要其他格式的要在上面先做判断 }
敲完以上代码,在本地运行之后图片就会自动存进目标文件夹,为了防止出现超时错误,请自行修改PHP超时代码。