php完美实现下载远程图片保存到本地

class DownloadImage
{
    /*
    *功能:php完美实现下载远程图片保存到本地
    *参数:文件url,保存文件目录,保存文件名称,使用的下载方式
    *当保存文件名称为空时则使用远程文件原来的名称
    */
    public static function getImage($url, $save_dir = '', $filename = '', $type = 0)
    {
        if (trim($url) == '')
        {
            return ['file_name' => '', 'save_path' => '', 'error' => 1, 'error_message' => 'url不能为空'];
        }
        $save_absolute_dir = ROOT_PATH . "/" . $save_dir;
        if (trim($filename) == '')
        {//保存文件名
            $ext = strrchr($url, '.');
            if ($ext != '.gif' && $ext != '.GIF' && $ext != '.jpg' && $ext != '.JPG' && $ext != '.jpeg' && $ext != '.JPEG' && $ext != '.png' && $ext != '.PNG')
            {
                return ['file_name' => '', 'save_path' => '', 'error' => 3, 'error_message' => '图片格式不正确'];
            }
            $filename = time() . $ext;
        }
        $last = strlen($save_absolute_dir) - 1;
        if ($save_absolute_dir[$last] !== "/")
        {
            $save_absolute_dir .= '/';
        }
        //创建保存目录
        if (!file_exists($save_absolute_dir) && !mkdir($save_absolute_dir, 0777, true))
        {
            return ['file_name' => '', 'save_path' => '', 'error' => 5, 'error_message' => '创建目录失败'];
        }
        //获取远程文件所采用的方法
        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);
            $img = curl_exec($ch);
            curl_close($ch);
        }
        else
        {
            ob_start();
            readfile($url);
            $img = ob_get_contents();
            ob_end_clean();
        }
        //$size=strlen($img);
        //文件大小
        $fp2 = @fopen($save_absolute_dir . $filename, 'a');
        fwrite($fp2, $img);
        fclose($fp2);
        unset($img, $url);
        return ['file_name' => $filename, 'save_path' => $save_dir . '/' . $filename, 'error' => 0, 'error_message' => ''];
    }
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ZH蔚来

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

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

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

打赏作者

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

抵扣说明:

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

余额充值