首页 » Web技术 » PHP » 正文

[笔记]PHP下载远程图片的方法

PHP下载远程图片保存到本地的方法:

/**
 * PHP下载远程图片
 * Author Url: https://9iphp.com/
 * @param  string $url      图片路径URL
 * @param  string $savePath 图片本地保存路径
 * @param  string $filename 保存名称,不带后缀
 * @return string           图片路径及图片名称
 */
function downPic($url, $savePath='', $filename='', $type=true){
    // 没有图片路径或保存路径为空
    if (empty($url) || empty($savePath)) return false;
    // 远程图片不存在
    if (!@fopen($url, 'r')) return false;
    $ext = strrchr($url, ".");
    $data = getimagesize($url);
    // 根据文件Mime类型判断
    if (!in_array($data['mime'], array('image/gif','image/jpeg','image/png'))) {
        return false;
    }
    // 也可根据后缀来判断
    // if ($ext != '.gif' && $ext != '.jpg' && $ext != '.png') return false;
    $filename = $filename == '' ? date("YmdHis").'_'.rand(10000, 99999).$ext : $filename.$ext;
    // echo $filename;
    if (!file_exists($savePath)) {
        mkdir($savePath, 0777, true);
    }
    //两种下载方式
    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);
        $file = curl_exec($ch);
        curl_close($ch);
    }else{
        ob_start();
        readfile($url);
        $file = ob_get_contents();
        ob_end_clean();
    }

    file_put_contents($savePath.$filename,$file);
    // 或用fopen方法保存
    /*$res = fopen($savePath.$filename,'a');
    fwrite($res, $file);
    fclose($res);*/

    return $savePath.$filename;
}

// 使用方法
downPic('http://img.t.sinajs.cn/t6/skin/skin053/images/body_bg.jpg','./');
//或者指定保存名称
downPic('http://img.t.sinajs.cn/t6/skin/skin053/images/body_bg.jpg','./','pic');
缺陷:目前不支持https链接的图片下载

本文共 1 个回复

  • 轻微生活 2015/04/28 18:25

    那些插件应该就是这样写出来的,经常复制图文感觉会很方便 :smile:

发表评论