preg_replace() 함수를 preg_replace_callback 함수로 변경하려는데요

preg_replace() 함수를 preg_replace_callback 함수로 변경하려는데요

QA

preg_replace() 함수를 preg_replace_callback 함수로 변경하려는데요

본문

안녕하세요

에러메시지가 이렇게 나서요

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback


아무래도 preg_replace함수를  preg_replace_callback 함수로 바꿔야 할것 같은데요



아래가 문제 에러가는 부분입니다.

아래 preg_replace함수를  preg_replace_callback 함수로 어떻게 바꿔야 할까요?


$view[rich_content] = preg_replace(
        "/{이미지\:([0-9]+)[:]?([^}]*)}/ie",
        "view_image(\$view, '\\1', '\\2')",
        $view[content]);
 

이 질문에 댓글 쓰기 :

답변 1

대략 아래와 같은 형태가 되지 않을까 싶습니다.



<?php
// for preg_replace with 'e' modifier
function view_image($view, $a, $b) {
    return str_replace($a, $b, $view['content']);
}

// for preg_replace_callback
function view_image_func($view, $matches) {
    return str_replace($matches[1], $matches[2], $view['content']);
}

$view = ['content' => '12341234ㅇㅇㅇxxㄹdd', 'rich_content' => ''];
/*$view['rich_content'] = preg_replace(
        "/{이미지\:([0-9]+)[:]?([^}]*)}/ie", 
        "view_image(\$view, '\\1', '\\2')", 
        $view['content']);*/
$view['rich_content'] = preg_replace_callback(
        '/{이미지\:([0-9]+)[:]?([^}]*)}/i', 
        function ($matches) use ($view) { return view_image_func($view, $matches); },
        $view['content']);

print('<pre>');
print_r($view);
print('</pre>');
?>

찾아가는 경로입니다.

php.net
    Documentaion (http://php.net/docs.php)
        English (http://php.net/manual/en/)
            Language Reference - Functions (http://php.net/manual/en/language.functions.php)
                Anonymous functions (http://php.net/manual/en/functions.anonymous.php)

또는
'php anonymous function' 로 검색하시면 됩니다.

감사합니다.위에 적어주신 함수들은 해당 파일 어디에 적어줘야 하나요?^^;

그리고 view_image함수는 제 소스(그누보드4 버전)에서 lib/common.lib.php에 아래처럼 있던데
아래 함수와는 다른 함수같은데 이름이 같아서 충돌문제가 안되려는지^^

 // view_file_link() 함수에서 넘겨진 이미지를 보이게 합니다.
// {img:0} ... {img:n} 과 같은 형식
function view_image($view, $number, $attribute)
{
    if ($view['file'][$number]['view'])
        return preg_replace("/>$/", " $attribute>", $view['file'][$number]['view']);
    else
        //return "{".$number."번 이미지 없음}";
        return "";
}

음.. 글쎄요, 에러메세지 관련 함수명까지 올려놓으셨길래
해당 위치와 교체방법을 알고 계실꺼라 생각을 했습니다.
'function view_image' 로 검색해 보시면 될것 같습니다.

이해를 못해서 죄송합니다^^
적어주신 view_image 함수와  view_image_func 함수를 문제의 소스 윗부분에 그냥 위치하면 될까요?

그리고... 우연히???
알려주신  view_image함수와 똑같은 함수가
제 소스(그누보드4 버전)에서 lib/common.lib.php에 아래처럼 있던데
아래 함수와는 다른 함수같은데 이름이 같아서 충돌문제가 안되려는지^^

 // view_file_link() 함수에서 넘겨진 이미지를 보이게 합니다.
// {img:0} ... {img:n} 과 같은 형식
function view_image($view, $number, $attribute)
{
    if ($view['file'][$number]['view'])
        return preg_replace("/>$/", " $attribute>", $view['file'][$number]['view']);
    else
        //return "{".$number."번 이미지 없음}";
        return "";
}

아니 죄송하실것 까지 없구요;; ㅋ

함수명이 같은것이 중복되어 존재하면 재선언 불가관련에러 발생합니다.

그리고 답변에 달아드린 view_image, view_image_func 는 제가 실제 각 함수의 내용을 모르기 때문에
비교와 로직 흐름을 위해 임의로 작성한 예시함수인 것이구요.

preg_replace_callback 으로 수정하시고
함수 body 안의 내용을 그에 맞는것으로 교체해 주셔야 합니다.
view_image 이름으로 사용하실 거면 현재 함수 body 를 바꿔주어야 할테구요,
view_image_func 이름으로 사용하실 거면 함수명 새로 만들고 body 알맞게 채워주셔야 하는거죠.

아니면 기존함수쪽 전혀 손대지 않으실거면
function ($matches) use ($view) { return view_image($view, $matches[1],  $matches[2]); }
이런식으로 할수도 있는 것이구요.

답변을 작성하시기 전에 로그인 해주세요.
전체 123,123 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT