여기서 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를 사용후 그 이후에 더이상 사용하는것을 방지하기 위함이거나
필요가 없다고 생각하여 변수를 없애려고 넣은것 같네요
가비지 컬랙션 때문이지요.
의외로 변수의 재 사용성이 문제가 되어 메모리 릭이 잘 일어나는게 php 입니다.
단지얍님의 말씀에 덧붙여,
브라우져 또는 별도의 툴을 사용해서 변수에 값을 넣어 해킹(?) 을 시도하는것을
초기화 해주는 목적도 있습니다.
리눅스 계열의 경우
웹서버에 접근할때 아파치 데몬이 Fork 해서 할당 받은 프로세서로 메모리를 사용하고
서버의 환경 설정에 따라 프로세서가 종료될때 메모리도 같이 Free 해주거나
사용한 해당 메모리 포인트을 날려서 다른곳에서 메모리를 사용 할 수 있게 하는것으로 알고 있습니다.
어떤 OS 와 프로그램이든 메모리릭은 있기 마련이지만
아파치의 내부 구조는 가베지 방식이 아닌것으로 알고 있어서,
메모리릭은 거의 없다고 보셔도 될겁니다. 아파치는 어셈 & C & C++ 로 메모리 관리가 필수거든요
답변 감사합니다 ^^*