미리 정의된 변수
변수에는 우리가 만들어 사용할 수 있는 변수와 미리 정의되어진 변수가 있습니다. 우선 미리 정의된 변수는 서버 종류, 버전 등이나 기타 환경에 따라 변하는 변수들입니다. 아파치와 PHP 각각 몇 개의 변수를 지정해 놓은 상태이며 이 변수들은 우리가 인위적으로 값을 수정하거나 일반 변수로 사용할 수 없습니다. 이 변수들은 아파치 홈페이지나 PHP의 phpinfo() 함수로 확인할 수 있습니다.
http://kr2.php.net/manual/kr/reserved.variables.php
수퍼 전역변수
$_GET | HTTP GET 방식으로 넘어온 변수 |
$_POST | HTTP POST 방식으로 넘어온 변수 |
$_COOKIE | HTTP 쿠키 변수 |
$_FILES | 업로드시 파일 정보 변수 |
$_SESSION | 세션 변수 |
$_SERVER | 웹서버와 PHP 환경에서의 환경 설정 변수 |
외부로 부터의 변수
내부에 선언없이 외부로부터 넘어오는 변수입니다. 예제를 보시면 이해가 가실 겁니다.
참고.
이 소스는 register_globals=on 인 상태에서만 작동합니다.
이를 수정하시려면 서버의 php.ini 파일에서 위부분을 찾으시어 off 를 on 으로 바꾸시기 바랍니다.
혹은 $info 변수 대신에 $_POST["info"] 를 사용하셔도 무관합니다.
1 |
<form action="<? echo $PHP_SELF ?>" method=post> |
위 소스는 폼에 임의의 값을 입력받아 자신의 파일($PHP_SELF)로 그 정보를 넘기는 프로그램입니다.
이 그림이 위의 소스를 실행한 결과입니다.
자 그럼 abc라는 값을 보내 보겠습니다. 위에서 폼의 action(정보를 보낼 문서 경로 지정)에 $PHP_SELF를 썼기 때문에 자기 자신 파일로 정보(abc)를 보내게 됩니다.$PHP_SELF 는 미리 정의된 변수로 자신의 파일명을 나타냅니다.
첫 번째 그림에서 없던 abc라는 값이 출력되었습니다. abc라는 값은 위의 소스에서 info라는 이름의 input 박스를 통해 넘어온 값입니다. 이 값은 $info 라는 변수에 자동 저장되므로 $info 변수를 통해서 이 값을 출력했습니다.
일반적인 변수 ( 프로그래머가 임의적으로 만들어 쓰는 변수 )
변수는 앞서 말씀드렸듯이 $ 표시를 시작으로 일정의 문자열을 덧붙여 만듭니다. 그런데 달러 표시 다음에 붙는 문자열에는 아무 문자나 올수 있는게 아니라 일정의 규칙을 위반하지 않아야만 변수로 이용할 수 있습니다. 이 규칙이 위배되지 않는 문자열을 식별자라고 합니다. 즉, 식별자는 변수나 클래스 함수등의 이름으로 쓰일 수 있는 문자열이지요.
1. 영문 소, 대문자 , 숫자 그리고 _ (밑줄)로 이루어 집니다. 이 이외의 문자를 포함하면 에러가 나게 됩니다.
2. 소문자 대문자의 구별이 있습니다. (PHP 내장함수 제외 예) print(""); 와 Print("");는 같음)
3. 변수는 반드시 $로 시작합니다..
4. 식별자의 첫 문자는 숫자가 올 수 없습니다. ( 7abc 는 식별자가 될 수 없음 )
팁.
PHP는 Unicode 변수를 허용하므로 한글 변수명도 사용가능합니다. $변수 처럼말이죠. 그래도 영문변수명을 쓰는 버릇을 들이세요 ^^ 허용가능한 식별자와 불가능한 식별자의 예를 비교해 보겠습니다.
허용 : babo , php4 , linux_apache_php_MySQL
불허 : babo? , 4php , linux-apache-php-MySQL
위의 비교를 유심히 살펴 보시면 어떤 것이 식별자로 사용 가능한지 아실 수 있을 것입니다. 그럼 이 식별자를 이용해 변수를 만들고 이 변수를 출력하는 프로그램을 만들어 보겠습니다.
1 |
<? |
위 소스의 결과는 다음과 같습니다.
변수 $a 값과 $b 값을 더해서(+) $sum 변수값에 대입하고 출력하는 소스입니다. 쉽죠? 이제 변수가 어떤 것인지 조금 아시겠어요?
미리 정의된 변수와 똑같은 이름의 변수를 만들어 쓰지 않도록 유의하시기 바랍니다PHP 버전 4.2.0 이후 부터는 보안상의 이유로 register_globals=off 로 되어 있습니다. register_globals 옵션은 환경,GET,POST,쿠키,서버 변수를 전역변수로 만들 것인지 설정하는 것입니다. on 인 경우에는 외부로 부터의 변수를 그저 $변수 하면 되었지만 off 인 경우는 반드시 출처에 맞게 GET을 통해온 것이면 $_GET[변수명] 과 같이 사용해야만 합니다. 관리자인 경우 on 으로 설정을 바꿀 수도 있지만 보안상의 이유로 off로 두어야만 할때, 아래와 같은 코드를 모든 PHP 파일 상단부에 삽입하시면 이 문제는 해결됩니다.
<?
extract($_POST);
extract($_GET);
extract($_SERVER);
?>