/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg

 

이런 소스의 숫자를 세려고 합니다.

 

/files/attach/images/ 가 포함된 소스의 숫자만 세면 같은 이미지를 여러번 삽입한 경우 중복 카운트가 됩니다.

 

그래서 파일명까지 고려해서 중복은 제외해야 하는데 어렵네요.

 

 

현재는 단순히 

$content = $oDocument->get('content');
$icount = substr_count($content, "files/attach/images");

 

이렇게까지만 카운트하니 10% 모자란 중복으로 같은 이미지를 본문에 여러번 넣은 경우가 조건에서 빠져버려서요.

 

  • ?
    <?php
    
    
        $content = '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg"/>';
        $content .= '<img src="https://www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg"/>';
        $content .= '<img src="http://www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3dwesrtwert14fc44e21ab.jpg"/>';
        $content .= '<img src="/files/attach/images/160490/955/222/002/f27c275c03b3dwesrtwert14fc44e21ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3dwesrtwert14fc44e21ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c27hhhhhhhfc44e21ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275chhhhhhs1ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3da7e3deaf14fc44e21ab.jpg"/>';
        $content .= '<img src="/files/attach/images/160490/955/222/002/f27c275c0sdfsdfdsfc44e21ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03bsdfsdgggfc44e21ab.jpg"/>';
        $content .= '<img src="//www.asdf.dddd/files/attach/images/160490/955/222/002/f27c275c03b3dggdeaf14fc44e21ab.jpg"/>';
        $content .= '<img src="/files/attach/images/160490/955/222/002/f27c275c03ggfdsgfgsdg14fc44e21ab.jpg"/>';
    
    
        $regex = "/\/files\/attach\/images\/((?:[0-9]+\/)+[0-9a-z]+.[0-9a-z]+)/";
        preg_match_all($regex, $content, $result);
    
        $links = array();
    
        if($result && count($result)) {
            foreach($result[1] as $key=>$value) {
                $link = "/files/attach/images/".$value;
                $find = false;
                foreach($links as $eachLink) {
                    if($eachLink->link === $link) {
                        $find = $eachLink;
                    }
                }
                if(!$find) {
                    $obj = new stdClass;
                    $obj->link = "/files/attach/images/".$value;
                    $obj->count = 1;
                    $links[] = $obj;
                } else {
                    $find->count += 1;
                }
            }
        }
    
        $linkCount = count($links);

    최종적으로 $linkCount는 8.

    $content는 내용, linkCount는 중복 제외 링크 갯수입니다.

  • ? profile
    감사합니다! 잘 사용하겠습니다.
  • profile

    $content = $oDocument->get('content');

    $icount = preg_match_all('!/files/attach/images/[0-9a-z/]+\.[a-z]+!i', $content, $matches) ? count(array_unique($matches[0])) : 0;

  • profile profile
    오 감사합니다. 요건 소스가 짧고 따로 반복문이 필요없네요. 요걸로 해보겠습니다.
  • profile profile

    만들어주신 캐시서버 이미지주소로 변환해주는 애드온이 저로 인해 지금 산으로 갔습니다 ㅋㅋ

     - 모르고 첨부삭제를 누른 후 다시 첨부를 안하는 경우 본문에 소스가 지워지지 않아 이를 눈치채지 못한 경우 캐시서버쪽으로 치환하지 않도록 하려고 어제 시도했는데 보다 정교하게 중복소스가 들어간 경우도 완벽하게 처리하려고 질문하게 되었네요 ㅋ