본문 바로가기
코딩

[PHP] 전역변수, 완전 전역 ($GLOBALS, $_POST 등)

by 우월한하루 2023. 1. 6.
728x90
반응형

 

 

 

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를 사용할 때 필수적으로 알아두어야 할 개념이니 전역변수에 대해서 이 글을 통해 많은 정보 얻어가는데 도움이 되시길 바랍니다.

 

728x90
반응형

댓글