본문 바로가기
프로그래밍/PHP

PHP 마이그레이션시 자주 나오는 DEPRECATED 함수 대체하기

by pentode 2018. 4. 17.

PHP로 만들어진 오래된 홈페이지에 PHP 버전을 올릴 경우 여러가지 문제가 발생할 수 있습니다. 파라미터를 변수에 자동으로 할당하는 register_globals 옵션 문제, <? 태그를 사용하는 short_open_tag 옵션 문제, 버전이 올라가면서 지원하지 않는 함수가 생기는 문제 등입니다.


register_globals 옵션은 PHP 5.3.0에서 DEPRECATED 되었고, PHP 5.4.0 부터는 제거되어서 사용할 수 없습니다.


이번에 알아볼 것은 버전이 올라가면서 지원되지 않는 함수들 중 가장 많이 나타나는 몇가지를 알아볼 것입니다.


PHP 버전을 올리고 실행을 해보면 지원되지 않는 함수로 인해 다음과 같은 에러 메세지가 보여질 수 있습니다.


Call to undefined function eregi()


PHP 5.3.0 부터 DEPRECATED 되었고, PHP 7.0.0 버전에서는 완전히 없어진 많이 쓰이는 함수들 로 다음과 같은 것들이 있습니다.


- ereg() : 정규식을 사용하여 문자열 매칭 여부를 판단합니다.(대소문자 구분)

- ereg_replace() : 정규식을 사용하여 문자열을 대치합니다.(대소문자 구분)

- eregi() : 정규식을 사용하여 문자열 매칭 여부를 판단합니다.(대소문자 구분하지 않음)

- eregi_replace() : 정규식을 사용하여 문자열을 대치합니다.(대소문자 구분하지 않음)

- split() : 문자열을 구분하로 분리합니다.


1. preg_match()는 ereg()와 eregi()를 대체합니다.


먼저 기존 함수의 사용법을 보겠습니다. 아래 예는 $subject가 소문자 abc로 시작하는지 체크합니다. 대소문자를 구분하지 않고 체크하려면 eregi() 함수를 사용하면 되겠습니다.

 

<?php
$subject = "abcdef";
$pattern = '^abc';
if(ereg($pattern, $subject) {
    echo("match");
}
?>

 

ereg()를 대체하는 새로운 함수인 preg_match() 의 사용법 입니다. 정규식 패턴을 만드는데 차이점이 보입니다. 패턴의 시작과 끝에 '/' 를 넣어야 합니다. 대소문자를 구분하지 않고 비교하려면 패턴의 끝에 "i" 문자를 입력합니다. $pattern = '/^abc/i'; 가 되겠습니다.

 

<?php
$subject = "abcdef";
$pattern = '/^abc/';
if(preg_match($pattern, $subject) {
    echo("match");
}
?>

 

2. preg_replace()는 ereg_replace()와 eregi_replace() 를 대체합니다. 주의할 점을 위의 preg_match() 에서와 동일합니다. 정규식 패턴의 앞과 뒤에 '/' 를 추가하고, 대소문자를 구분하지 않을때는 패턴 끝에 "i" 를 추가합니다.

 

<?php 
$subject = "abcdef";
$pattern = '/^ABC/i';

$subject = preg_replace($pattern, '', $subject);

echo($subject);
?>

 

3. explode() 는 split() 함수의 문자열 분리 기능을 대체할 수 있습니다.

 

<?php
$daytime = split(" ", "2017-02-02 14:30 235");
print_r($daytime);

$daytime = explode(" ", "2017-02-02 14:30 235");
print_r($daytime);
?>

 

PHP 버전을 올릴때 문제가 되는 자주 나오는 함수를 대체하는 방법을 알아 보았습니다.

반응형