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);
?>
출처: https://offbyone.tistory.com/173 [쉬고 싶은 개발자]
'PHP' 카테고리의 다른 글
php 이미지 리사이징 image resizing (0) | 2021.04.28 |
---|---|
PHP ZIP 압축파일 만들기 (0) | 2021.04.28 |
Zendguard loader 버전별 설치파일 (0) | 2020.06.19 |
php 윈도우버전 다운로드 (0) | 2020.05.26 |
문자의 charset(캐릭터셋) 확인하기 (0) | 2020.01.22 |
댓글