PHP 下载远程图片到本地

2 篇文章 0 订阅
 /**
     *   远程下载本地图片
     *   @param string 下载图片路径
     *   @param string 指定文件名
     *   @param string 保存路径
     *   @return array 文件信息(【路径+文件名-returnFile】 【文件名-FileName】 【后缀名(如.jpeg)-extension】 【路径-path】)
    */
    private function downloadImageFromUrl($url, $fileName = '', $path = "./upload/img/")
    {
        // 建立一个临时文件,用于保存
        $tmpFile = tempnam(sys_get_temp_dir(), 'image');
        # 文件下载 BEGIN #
        // 打开临时文件,用于写入(w),b二进制文件
        $resource = fopen($tmpFile, 'wb');
        // 初始化curl
        $curl = curl_init($url);
        // 设置输出文件为刚打开的
        curl_setopt($curl, CURLOPT_FILE, $resource);
        // 不需要头文件
        curl_setopt($curl, CURLOPT_HEADER, 0);
        // 执行
        curl_exec($curl);
        // 关闭curl
        curl_close($curl);
        // 关闭文件
        fclose($resource);
        # 文件下载 END #
        // 获取文件类型
        if (function_exists('exif_imagetype')) {
            // 读取一个图像的第一个字节并检查其签名(这里需要打开mbstring及php_exif)
            $fileType = exif_imagetype($tmpFile);
        } else {
            // 获取文件大小,里面第二个参数是文件类型 (这里后缀可以直接通过getimagesize($url)来获取,但是很慢)
            $fileInfo = getimagesize($tmpFile);
            $fileType = $fileInfo[2];
        }
        // 根据文件类型获取后缀名
        $extension = image_type_to_extension($fileType);

        // 如果未指定文件名则使用MD5散列值
        if($fileName == ''){
            // 计算指定文件的 MD5 散列值,作为保存的文件名,重复下载同一个文件不会产生重复保存,相同的文件散列值相同
            $md5FileName = md5_file($tmpFile);
        }else{
            $md5FileName = $fileName;
        }

        // 最终保存的文件
        $returnFile = $path . $md5FileName . $extension;
        // 检查传过来的路径是否存在,不存在就创建
        if (!is_dir($path)) {
            mkdir($path, 0777, true);
        }
        // 复制临时文件到最终保存的文件中
        copy($tmpFile, $returnFile);
        // 释放临时文件
        @unlink($tmpFile);
        // 返回文件信息
        return array('returnFile' => $returnFile, 'FileName' => $md5FileName, 'extension' => $extension, 'path' => $path);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_331542397

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值