while(1) { study(); }/WEB (or Web site)

php상에서 predefined variable 하위 호환성

Dien 2009. 8. 14. 11:18


$HTTP_POST_VARS 값 같은 경우는 php 4.1.0 이후 버려졌다(deprecated).
버려진 값들은 아래와 같다.

$HTTP_POST_VARS
$HTTP_GET_VARS
$HTTP_SERVER_VARS
$HTTP_COOKIE_VARS
$HTTP_ENV_VARS
$HTTP_POST_FILES
$HTTP_SESSION_VARS



따라서, 동일 소스를 php 4.1 이하 버전이 설치된 서버 상에서 구동시킬 경우

특정 변수값에서 오류가 발생할 수 있다.

(있을 거라고 생각하고 사용하는데 내용이 비어있는.. 뭐 그런; )


이를 해결할 수 있는 방법을 gnuboard 소스에서 찾았다.
(링크 : gnuboard 배포 사이트)


if (isset($HTTP_POST_VARS) && !isset($_POST))
{
$_POST   = &$HTTP_POST_VARS;
$_GET    = &$HTTP_GET_VARS;
$_SERVER = &$HTTP_SERVER_VARS;
$_COOKIE = &$HTTP_COOKIE_VARS;
$_ENV    = &$HTTP_ENV_VARS;
$_FILES  = &$HTTP_POST_FILES;

 
if (!isset($_SESSION))
$_SESSION = &$HTTP_SESSION_VARS;
}



C에서 pointer의 사용과 유사하게 & 연산자를 이용해 각 변수를 선언한다.

어찌보면 php의 reference는 C의 pointer와 유사해보이나,

그렇다고 해서 C의 pointer와 동일하게 동작하지는 않으므로 유의해서 사용해야 한다.


예를 들어, 함수의 인자로 reference를 넘기고 함수 내에서 해당 reference를 변경한다던가..

이런 식의 사용은 php에서는 삼가야한다. 


function의 return값으로 refernce를 넘겨,

그 return값을 원래 변수에 할당하는 식으로 처리해야한다.