PHP 전역 변수 - 슈퍼 전역 변수
PHP에서 미리 정의된 변수 중 다수는 "슈퍼 전역"입니다. 즉, 스크립트의 전체 범위에서 사용할 수 있습니다. 전역 $variable;을 실행하지 않고도 함수나 메서드 내에서 액세스할 수 있습니다.
이러한 슈퍼 전역 변수는 다음과 같습니다.
$GLOBALS
$_SERVER
$_REQUEST
$_POST
$ _GET
$_FILES
$_ENV
$_COOKIE
$_SESSION
이 섹션에서는 몇 가지 슈퍼 전역 변수를 소개하고 기타 슈퍼전역 변수는 이후 장에서 설명됩니다.
$GLOBALS — 전역 범위에서 사용할 수 있는 모든 변수를 나타냅니다.
$GLOBALS 이 전역 변수는 PHP 스크립트의 어디에서나(함수 또는 메서드에서) 전역 변수에 액세스하는 데 사용됩니다.
PHP는 모든 전역 변수를 $GLOBALS[index]라는 배열에 저장합니다. 변수의 이름은 배열의 키입니다.
다음 예에서는 슈퍼 전역 변수 $GLOBALS를 사용하는 방법을 보여줍니다.
Instance
<?php $x = 75; $y = 25; function addition() { $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y']; } addition(); echo $z; ?>
Running Instance
위 예에서는 이후 z는 $GLOBALS 배열의 변수이므로 함수 외부에서 액세스할 수 있습니다.
PHP $_SERVER
$_SERVER 이 슈퍼글로벌 변수는 헤더, 경로 및 스크립트 위치에 대한 정보를 보유합니다.
다음 예에서는 $_SERVER의 특정 요소를 사용하는 방법을 보여줍니다.
Instance
<?php echo $_SERVER['PHP_SELF']; echo "<br>"; echo $_SERVER['SERVER_NAME']; echo "<br>"; echo $_SERVER['HTTP_HOST']; echo "<br>"; echo $_SERVER['HTTP_REFERER']; echo "<br>"; echo $_SERVER['HTTP_USER_AGENT']; echo "<br>"; echo $_SERVER['SCRIPT_NAME']; ?>
Running Instance
다음 표에는 가장 중요한 항목이 나열되어 있습니다. $_SERVER에서 액세스할 수 있는 요소:
요소/코드 설명
$_SERVER['PHP_SELF'] 현재 실행 중인 스크립트의 파일 이름을 반환합니다.
$_SERVER['GATEWAY_INTERFACE']는 서버에서 사용하는 CGI 사양 버전을 반환합니다.
$_SERVER['SERVER_ADDR']은 스크립트가 현재 실행 중인 서버의 IP 주소를 반환합니다.
$_SERVER['SERVER_NAME']은 스크립트가 현재 실행 중인 서버의 호스트 이름(예: www.w3school.com.cn)을 반환합니다.
$_SERVER['SERVER_SOFTWARE']는 서버 식별 문자열(예: Apache/2.2.24)을 반환합니다.
$_SERVER['SERVER_PROTOCOL'] 페이지가 요청되었을 때 통신 프로토콜의 이름과 버전을 반환합니다(예: "HTTP/1.0").
$_SERVER['REQUEST_METHOD']는 페이지에 액세스하는 데 사용되는 요청 방법(예: POST)을 반환합니다.
$_SERVER['REQUEST_TIME']은 요청이 시작된 타임스탬프를 반환합니다(예: 1577687494).
$_SERVER['QUERY_STRING'] 쿼리 문자열을 통해 이 페이지에 액세스하는 경우 쿼리 문자열을 반환합니다.
$_SERVER['HTTP_ACCEPT'] 현재 요청의 요청 헤더를 반환합니다.
$_SERVER['HTTP_ACCEPT_CHARSET']는 현재 요청(예: utf-8, ISO-8859-1)에서 Accept_Charset 헤더를 반환합니다.
$_SERVER['HTTP_HOST']는 Accept_Charset를 반환합니다. 현재 요청 호스트 헤더의 헤더입니다.
$_SERVER['HTTP_REFERER'] 현재 페이지의 전체 URL을 반환합니다(모든 사용자 에이전트에서 지원되지 않으므로 신뢰할 수 없음).
$_SERVER['HTTPS'] 보안 HTTP 프로토콜을 통해 스크립트를 쿼리할지 여부입니다.
$_SERVER['REMOTE_ADDR'] 현재 페이지를 탐색하는 사용자의 IP 주소를 반환합니다.
$_SERVER['REMOTE_HOST'] 현재 페이지를 탐색하는 사용자의 호스트 이름을 반환합니다.
$_SERVER['REMOTE_PORT'] 웹 서버에 연결하기 위해 사용자 컴퓨터에서 사용되는 포트 번호를 반환합니다.
$_SERVER['SCRIPT_FILENAME']은 현재 실행 중인 스크립트의 절대 경로를 반환합니다.
$_SERVER['SERVER_ADMIN'] 이 값은 Apache 서버 구성 파일의 SERVER_ADMIN 매개변수를 지정합니다.
$_SERVER['SERVER_PORT'] 웹 서버가 사용하는 포트입니다. 기본값은 "80"입니다.
$_SERVER['SERVER_SIGNATURE']는 서버 버전과 가상 호스트 이름을 반환합니다.
$_SERVER['PATH_TRANSLATED'] 현재 스크립트가 있는 파일 시스템의 기본 경로(문서 루트 디렉터리 아님)입니다.
$_SERVER['SCRIPT_NAME']은 현재 스크립트의 경로를 반환합니다.
$_SERVER['SCRIPT_URI']는 현재 페이지의 URI를 반환합니다.
PHP $_REQUEST
PHP $_REQUEST는 HTML 양식으로 제출된 데이터를 수집하는 데 사용됩니다.
아래 예는 입력 필드와 제출 버튼이 있는 양식을 보여줍니다. 사용자가 제출 버튼을 클릭하여 양식 데이터를 제출하면 양식 데이터는 ff9c23ada1bcecdd1a0fb5d5a0f18437 태그의 작업 속성에 지정된 스크립트 파일로 전송됩니다. 이 예에서는 양식 데이터를 처리하기 위해 파일 자체를 지정합니다. 양식 데이터를 처리하기 위해 다른 PHP 파일을 사용해야 하는 경우 파일 이름을 원하는 파일 이름으로 변경하세요. 그런 다음 슈퍼 전역 변수 $_REQUEST를 사용하여 입력 필드의 값을 수집할 수 있습니다.
Instance
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_REQUEST['fname']; echo $name; ?> </body> </html>
Run 인스턴스
PHP $_POST
PHP $_POST는 method="post"로 HTML 양식을 제출한 후 양식 데이터를 수집하는 데 널리 사용됩니다. $_POST는 일반적으로 변수를 전달하는 데에도 사용됩니다.
아래 예는 입력 필드와 제출 버튼이 있는 양식을 보여줍니다. 사용자가 데이터를 제출하기 위해 제출 버튼을 클릭하면 양식 데이터가 ff9c23ada1bcecdd1a0fb5d5a0f18437 태그의 작업 속성에 지정된 파일로 전송됩니다. 이 예에서는 양식 데이터를 처리하기 위해 파일 자체를 지정합니다. 다른 PHP 페이지를 사용하여 양식 데이터를 처리하려면 파일 이름을 원하는 파일 이름으로 변경하세요. 그런 다음 슈퍼전역 변수 $_POST를 사용하여 입력 필드의 값을 수집할 수 있습니다.
Instance
<html> <body> <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>"> Name: <input type="text" name="fname"> <input type="submit"> </form> <?php $name = $_POST['fname']; echo $name; ?> </body> </html>
Run Instance
PHP $_GET
PHP $_GET 也可用于收集提交 HTML 表单 (method="get") 之后的表单数据。
$_GET 也可以收集 URL 中的发送的数据。
假设我们有一张页面含有带参数的超链接:
<html> <body> <a href="test_get.php?subject=PHP&web=W3school.com.cn">测试 $GET</a> </body> </html>
当用户点击链接 "Test $GET",参数 "subject" 和 "web" 被发送到 "test_get.php",然后您就能够通过 $_GET 在 "test_get.php" 中访问这些值了。
下面的例子是 "test_get.php" 中的代码:
实例
<html> <body> <?php echo "Study " . $_GET['subject'] . " at " . $_GET['web']; ?> </body> </html>