PHP正则提取字符串中所有图片链接,并下载到本地且替换图片地址!

// PHP正则提取字符串中所有图片,并替换!
function upimgurl($value,$url){
    $imgList = getPatternMatchImages($value);
    if (empty($imgList)){
        return $value;
    }
    // 数组去重
    // $imgList = array_unique($imgList);
    // $newImgList = [];
    // foreach ($imgList as $key=>$img_url){
    //     // 更新内容,可以switch判断更改
    //     $newImgList[] = $url.$img_url;
    // }
    // print_r($imgList);die;
    for($i=0;$i<count($imgList);$i++){
        $domain = strstr($imgList[$i], '//');
        if($domain){
            $httpsstr = strstr($imgList[$i], 'http');
            if($httpsstr){
                $domainurl = $imgList[$i];
            }else{
                $domainurl = "https:".$imgList[$i];
            }
        }else{
            $domainurl = $url.$imgList[$i];
        }
        // print_r($domainurl);die;
        // print_r($value);
        $new_file = lx_downloadAndSaveFile($domainurl,strrchr($imgList[$i],'.'));
        if($new_file){
            $value = str_replace($imgList[$i],$new_file,$value);
        }
    }

    // print_r($value);die;
    return $value;
}


// 匹配出所有的 <img> 标签的 src属性
function getPatternMatchImages($contentStr = ""){
    $imgSrcArr = [];
    //首先将富文本字符串中的 img 标签进行匹配
    $pattern_imgTag = '/<img\b.*?(?:\>|\/>)/i';
    preg_match_all($pattern_imgTag,$contentStr,$matchIMG);
    if (isset($matchIMG[0])){
        foreach ($matchIMG[0] as $key => $imgTag){
            //进一步提取 img标签中的 src属性信息
            $pattern_src = '/\bsrc\b\s*=\s*[\'\"]?([^\'\"]*)[\'\"]?/i';
            preg_match_all($pattern_src,$imgTag,$matchSrc);
            if (isset($matchSrc[1])){
                foreach ($matchSrc[1] as $src){
                    //将匹配到的src信息压入数组
                    $imgSrcArr[] = $src;
                }
            }
        }
    }
    //$pattern= '/<img\b.+\bsrc\b\s*=\s*[\'\"]([^\'\"]*)[\'\"]/iU';
    return $imgSrcArr;
}

// 图片下载到本地
function lx_downloadAndSaveFile($name, $ext, $tried_count=0){
    if($tried_count>2) return;
    $file = file_get_contents($name);
    // print_r($file);die;
    if($file){
        // $url  = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http";
        // $url .= "://" . $_SERVER['HTTP_HOST'];
        // echo "当前URL为:" . $url;die;
        // print_r($ext);
        $path = '/wp-content/uploads/'.date('Y/m').'/'.lx_randFileName($ext);
        // print_r($path);
        // print_r($ext);die;
        file_put_contents('.'.$path, $file);
        //file_put_contents('/tmp/log1.txt',UPLOAD_IMG_PATH.$path);
        return $path;
    }else{
        sleep(3);
        return lx_downloadAndSaveFile($name, $ext, ++$tried_count);
    }
}
function lx_randFileName($ext){
    if($ext == '.jpeg' || $ext == '.webp'){
        return date('YmdHis').floor(rand(10000,99999)).'.'.substr(trim($ext),-4);
    }else{
        return date('YmdHis').floor(rand(10000,99999)).'.'.substr(trim($ext),-3);
    }
}

$content = upimgurl($post_content,'https://www.ceshi.com');
print_r($content);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值