php의 완전 전역은 PHP 4.1.0에서 도입되었으며 모든 범위에서 항상 사용할 수 있는 내장 변수입니다.
php에서 일부 미리 정의된 변수는 "superglobals"라고 하며, 범위에 관계없이 항상 액세스 할 수 있고 특별하게 작업하지 않아도 모든 함수, 클래스 또는 파일에서 액세스 할 수 있습니다.
이러한 php의 완전 전역 변수는 다음과 같습니다.
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
이 중에서 이번 포스팅에서는 일부분의 예제만 활용해 보도록 하겠습니다.
$GLOBALS란?
$GLOBALS는 어디에서나 사용이 가능한 php 슈퍼 전역 변수입니다.
php는 모든 전역 변수를 $GLOBALS [index]라는 배열에 저장하게 되고, 인덱스는 해당 변수의 이름을 가집니다.
<?php
$x = 100;
$y = 15;
function addition() {
$GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}
addition();
echo $z;
?>
위와 같이 예제를 작성하면 echo를 통해서 나오는 값은 '115'가 나오게 됩니다.
addition의 밖에서 전역 변수로 x와 y를 선언해 주었기 때문에,
addition함수 안에서 따로 변수를 선언해 주지 않아도 $GLOBALS에 담긴 x와 y값을 가져와서 사용이 가능합니다.
또한 addition함수 안의 z값도 $GLOBALS 배열 내에 있는 변수 이므로 함수 외부에서도 액세스가 가능합니다.
그래서 함수를 실행하기 전에는 z 값이 존재하지 않지만 함수를 실행하면 전역변수로 z가 선언되었기 때문에,
echo로 z의 값을 불러올 수 있으며, z의 값은 x + y 즉, 100 + 15인 115가 나오게 됩니다.
$_SERVER란?
$_SERVER는 헤더, 경로 및 스크립트 위치에 대한 정보를 보유한 슈퍼 전역변수입니다.
아래는 $_SERVER의 종류를 적어 둔 것입니다.
예시 ) 현재 페이지 주소 : https://jongs-story.tistory.com/manage/newpost/index.php?type=post
$_SERVER ['PHP_SELF'] = 현재페이지의 주소에서 도메인과 값을 넘기는 것은 제외
- /manage/newpost/index.php
$_SERVER ['REMOTE_ADDR'] = 사이트 접속한 사용자 IP
$_SERVER ['HTTP_USER_AGENT'] = 사이트 접속한 사용자 환경
$_SERVER ['DOCUMENT_ROOT'] = 현재 사이트가 위치한 서버상의 파일 위치
$_SERVER ['HTTP_ACCEPT_ENCODING'] = 인코딩 방식
$_SERVER ['HTTP_ACCEPT_LANGUAGE'] = 언어
$_SERVER ['SCRIPT_FILENAME'] = 실행되고 있는 위치와 파일명
- manage/newpost/index.php
$_SERVER ['SERVER_NAME'] = 사이트 도메인
- jongs-story.tistory.com
$_SERVER ['HTTP_REFERER'] = 이전페이지 주소값
$_SERVER ['SERVER_PORT'] = 사이트가 사용하는 포트
- 80
$_SERVER ['SERVER_SOFTWARE'] = 서버의 소프트웨어 환경
- Apache1.3.23 (Unix) PHP4.1.2 mod_fastcgi2.2.10 mod_throttle3.1.2 mod_ssl2.8.6 OpenSSL0.9.6 c
$_SERVER ['GATEWAY_INTERFACE'] = cGI 정보
- CGI1.1
$_SERVER ['SERVER_PROTOCOL'] = 사용된 서버 프로토콜
- HTTP1.1
$_SERVER ['REQUEST_URI'] = 현재페이지의 주소에서 도메인 제외
- /manage/newpost/index.php? type=post
$_SERVER ['APPL_PHYSICAL_PATH'] = 현재페이지의 실제 파일 주소
- home/test/
$_SERVER ['HTTP_HOST'] = 사용자가 접속한 주소
$_REQUEST란?
php의 $_REQUEST는 submit을 통해 양식을 제출한 후 제출한 데이터를 가져오는 데 사용되는 슈퍼 전역변수입니다.
간단한 예시로 알아보겠습니다.
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
Name: <input type="text" name="fname">
<input type="submit">
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = $_REQUEST['fname'];
if (!$name) {
echo "이름을 적어주세요!";
} else {
echo $name;
}
}
?>
이름이 fname인 텍스트 박스를 하나 만들어주고 그쪽에서 텍스트를 입력받습니다.
submit버튼을 클릭 시 $_SERVER ['PHP_SELF']를 사용하여 자기 자신에게 다시 값을 전달해 줍니다.
아래 if문을 사용하여 post방식으로 전송이 되어왔다면 $_REQUEST를 사용하여 전달받은 fname의 값을 $name로 저장합니다.
저장된 $name의 값이 없다면 "이름을 적어주세요!"라는 문구가 출력되고,
값이 있다면 입력된 값을 출력합니다.
결론
이 외에도 전역변수로 값을 받아오는 방식은 여러 가지가 있습니다.
이렇게 전역변수를 잘 활용하면 페이지와 페이지간의 데이터 교환이 쉽게 이루어질 수 있습니다.
php를 사용할 때 필수적으로 알아두어야 할 개념이니 전역변수에 대해서 이 글을 통해 많은 정보 얻어가는데 도움이 되시길 바랍니다.
'코딩' 카테고리의 다른 글
[HTML/PHP] 간단한 게시판 만들기 #2 (페이징) (40) | 2023.01.26 |
---|---|
[HTML/PHP] 간단한 게시판 만들기 #1 (DB 데이터 불러오기, 게시판 형식만들기) (33) | 2023.01.17 |
[PHP] strpos() 문자열 포함 여부 및 문자열 위치 알아내기 (18) | 2023.01.04 |
[CSS] object-fit 컨테이너에 맞게 이미지 크기 조정하기 (34) | 2023.01.03 |
[jQuery] 간단한 예제로 ajax 사용해보기 (28) | 2022.12.30 |
댓글