개발/php

[php 에러] Call to undefined function create_function() 해결 방법

반응형

 

 

 

Uncaught Error: Call to undefined function create_function() 에러는 create_function() 가 php8.x부터는 지원하지 않아 발생하는 오류이다.  create_function 부분을 function을 다르게 정의해서 수정하면 된다.

 

수정전

add_action( 'plugins_loaded', create_function( '', 'global $BBCode; $BBCode = new BBCode();' ) )

 

수정 후

function my_hacked_function(){
    global $BBCode; 
    $BBCode = new BBCode();
}
add_action( 'plugins_loaded', 'my_hacked_function');

 

참고사이트 : https://wordpress.stackexchange.com/questions/420266/call-to-undefined-function-create-function-php-8-2

 

 

적용 예시

영카트 /lib/shop.lib.php 파일 썸네일 생성하는 부분에서 create_function() 을 사용하고 있는데 아래처럼 변경하면 php8.x 상위버전에서 오류가 나지 않는다.

 

 

수정전

// 상품이미지 업로드
function it_img_upload($srcfile, $filename, $dir)
{
    if($filename == '')
        return '';

    $size = @getimagesize($srcfile);
    if($size[2] < 1 || $size[2] > 3)
        return '';

    //php파일도 getimagesize 에서 Image Type Flag 를 속일수 있다
    if (!preg_match('/\.(gif|jpe?g|png)$/i', $filename))
        return '';

    if(!is_dir($dir)) {
        @mkdir($dir, G5_DIR_PERMISSION);
        @chmod($dir, G5_DIR_PERMISSION);
    }

    $pattern = "/[#\&\+\-%@=\/\\:;,'\"\^`~\|\!\?\*\$#<>\(\)\[\]\{\}]/";

    $filename = preg_replace("/\s+/", "", $filename);
    $filename = preg_replace( $pattern, "", $filename);


    $filename = preg_replace_callback("/[가-힣]+/",create_function('$matches', 'return base64_encode($matches[0]);'),$filename); //수정전

 

 

수정후

 

create_functiond으로 되어 있던 부분을 상단에 따로 function을 정의( img_func )해주고

기존에 $filename 정의 되었던 부분은 preg_replace_callback('/[가-힣]+/', 'img_func', $filename); 로 변경

//추가
function img_func($matches) { 
    return base64_encode($matches[0]);
}
//추가끝

// 상품이미지 업로드
function it_img_upload($srcfile, $filename, $dir)
{
    if($filename == '')
        return '';

    $size = @getimagesize($srcfile);
    if($size[2] < 1 || $size[2] > 3)
        return '';

    //php파일도 getimagesize 에서 Image Type Flag 를 속일수 있다
    if (!preg_match('/\.(gif|jpe?g|png)$/i', $filename))
        return '';

    if(!is_dir($dir)) {
        @mkdir($dir, G5_DIR_PERMISSION);
        @chmod($dir, G5_DIR_PERMISSION);
    }

    $pattern = "/[#\&\+\-%@=\/\\:;,'\"\^`~\|\!\?\*\$#<>\(\)\[\]\{\}]/";

    $filename = preg_replace("/\s+/", "", $filename);
    $filename = preg_replace( $pattern, "", $filename);

    $filename  = preg_replace_callback('/[가-힣]+/', 'img_func', $filename); //수정
반응형