正则匹配多个img标签,下载匹配到的图片到本地服务器,并替换原图片地址

<?php
 
  //$contents:包含<img>标签的原字符串、$replaceStr:替换后的字符串
 
 if(strstr($contents,'<img'))
 {
     $pregRule = "/<[img|IMG].*?src=[\'|\"](.*?(?:[\.jpg|\.jpeg|\.png|\.gif|\.bmp]))[\'|\"].*?[\/]?>/";
     preg_match_all($pregRule,$contents,$array,PREG_PATTERN_ORDER);
     $replaceArr = array();
     foreach($array[1] as $value) {
            array_push($replaceArr, $this->_downLoadImage($value));
      }
     $replaceStr = str_replace($array[1], $replaceArr, $contents);
   }
 
    /*
     * 下载图片
     *
     * @params string img : 原图片地址
     * @return string savePath/false 保存后的地址/失败
     *
     * */
    private function _downLoadImage($img)
    {
        $imageTypeArray = array(
            1  => 'gif',
            2  => 'jpeg',
            3  => 'png',
            6  => 'bmp',
            15 => 'wbmp',
        );
        $imageType = exif_imagetype($img);
        if (empty($img) || !isset($imageTypeArray[$imageType])) {
            return false;
        }
 
        if(stripos($img,'http://')!== false or stripos($img,'ftp://')!== false){
            $fileDir = '../upload/image/' . date('Ymd') . '/';
            if(!is_dir($fileDir)) {
                if (!mkdir($fileDir, 0700, true)) {
                    return false;
                }
            }
            $filename = md5(microtime(true) . mt_rand()) . '.' . $imageTypeArray[$imageType];
            $savePath = $fileDir . $filename;
 
            ob_start();
            readfile($img);
            $img = ob_get_contents();
            ob_end_clean();
            $fp = @fopen($savePath, "a");
            if( fwrite($fp, $img) ){
                fclose($fp);
                return trim($savePath,'..');
            }else{
                fclose($fp);
                return false;
            }
        } else {
            return false;
        }
 
    }
   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值