正则匹配多个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;
        }

    }
   

猜你喜欢

转载自blog.csdn.net/bianb123/article/details/81513375