여기서 unset() 함수를 왜 쓰는거죠?

여기서 unset() 함수를 왜 쓰는거죠?

QA

여기서 unset() 함수를 왜 쓰는거죠?

본문

common.php 파일에서 g5_path 함수를 찾아보고 있었습니다

 

g5_path()를 실행해서 g5_path 변수에 넣어 쓸려고 하는데,

 

소스 맨 밑에 왜 unset() 함수를 쓰는지 몰라 질문 드립니다.

 

function g5_path()
{
    $result['path'] = str_replace('\\', '/', dirname(__FILE__));
    $tilde_remove = preg_replace('/^\/\~[^\/]+(.*)$/', '$1', $_SERVER['SCRIPT_NAME']);
    $document_root = str_replace($tilde_remove, '', $_SERVER['SCRIPT_FILENAME']);
    $root = str_replace($document_root, '', $result['path']);
    $port = $_SERVER['SERVER_PORT'] != 80 ? ':'.$_SERVER['SERVER_PORT'] : '';
    $http = 'http' . ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS']=='on') ? 's' : '') . '://';
    $user = str_replace(str_replace($document_root, '', $_SERVER['SCRIPT_FILENAME']), '', $_SERVER['SCRIPT_NAME']);
    $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'];
    if(isset($_SERVER['HTTP_HOST']) && preg_match('/:[0-9]+$/', $host))
        $host = preg_replace('/:[0-9]+$/', '', $host);
    $result['url'] = $http.$host.$port.$user.$root;
    return $result;
}

 

$g5_path = g5_path();

include_once($g5_path['path'].'/config.php');   // 설정 파일

unset($g5_path);​

 

이 질문에 댓글 쓰기 :

답변 4

unset() 함수는 지정된 변수를 초기화 해버리는 함수입니다.

즉, 해당 변수는 삭제되는것을 의미합니다.

 

위 소스에서는 $g5_path를 사용후 그 이후에 더이상 사용하는것을 방지하기 위함이거나

필요가 없다고 생각하여 변수를 없애려고 넣은것 같네요 

단지얍님의 말씀에 덧붙여, 

브라우져 또는 별도의 툴을 사용해서 변수에 ​값을 넣어 해킹(?) 을 시도하는것을

초기화 해주는 목적도 있습니다.

 

리눅스 계열의 경우

웹서버에 접근할때 아파치 데몬이 Fork 해서 할당 받은 프로세서로 메모리를 사용하고

서버의 환경 설정에 따라 프로세서가 종료될때 메모리도 같이 Free 해주거나

사용한 해당 메모리 포인트을 날려서 다른곳에서 메모리를 사용 할 수 있게 하는것으로 알고 있습니다.

 

어떤 OS 와 프로그램이든 메모리릭은 있기 마련이지만

아파치의 내부 구조는 가베지 방식이 아닌것으로 알고 있어서​, 

메모리릭은 거의 없다고 보셔도 될겁니다. 아파치는 어셈 & C & C++ 로 메모리 관리가 필수거든요

 

벤지님 글을 보고 제가 약간의 궁금증이 있어 이렇게 답변으로 문의 드려봅니다.
아파치 자체의 문제보다 php 자체의 문제로 인하여 (예를 들면 사용자의 과도한 전역변수 선언 및 변수 남발) 메모리 릭이 발생하였을 시에는 아파치의 이슈로 보는게 아니지 않을까 싶습니다. php 에서도 해당 문제를 인지하고 5.3 이후부터는 GC 를 제공하여주는데 unset의 용도가 메모리 릭 예방에서도 사용할 수 있지 않나요? 가까운 XE 만 보더라도 메모리 릭이 일어난다는 글을 자주 보아서 사실 좀 헛갈립니다.

PHP 5.3 이전 버젼에서 개발해서 그랬던건지
PHP 에서 메모리릭이 발생했다 라는 이슈는 저는 처음 들어서요..

저의 경우는 무조건 OS 부터 APM 전부 안정화 버젼중 최신버젼을 선택하고
가급적이면 메모리 Free 시키는 습관을 그대로 반영하려고 하는데
개발 자체가 큰 사이트의 경우에는 메모리 Free 신경 써주는 경우을 못 봐서요.
저 또한 마찮가지 였구요...

"요청하면 빨리 보내자" .. 중간에 Delay 가 생겨서, Fork 가 멈추면 누수가 생길지는
모르겠습니다만, 그런 경우는 C 로 웹 서비스할때도 못 느껴서....

MVC FrameWork 을 사용 했를 당시에도, 전혀 메모리 누수 문제을 못 느꼈고
오로지 원도우 응용프로그램 개발과 접속자 폭주로 인한 Apache 속도 저하, CPU 과부하
DB 쪽 튜닝쪽이 대부분이였어요.

아직도 제가 고집 피우는 한가지가 있는데,
가베지컬렉션(GC) 해주는 기능이 내장이 되어 있는 언어나 서버일지라도
가베지 컬렉션(GC)에 의존하지 않고 직접 코딩을 해요...

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

회원로그인

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