개발/php
[php 에러] Call to undefined function create_function() 해결 방법
HHHONG
2024. 10. 21. 15:45
반응형
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');
적용 예시
영카트 /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); //수정
반응형