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超时代码。

posted @ 2020-04-08 18:10  远方的异特  阅读(687)  评论(0编辑  收藏  举报