본문 바로가기
php/개인공부

전역변수 global/슈퍼글로벌/$GLOBALS /{ } / .연산자/ $_SERVER/ $_GET/ $_POST/ $_FILES/ $_COOKIE/ $_SESSION/$_REQUEST/ $_ENV //static 정적변수 (자바 vs php에서 static차이점?)

by SEOKIHOUSE 2023. 10. 24.
  • global

일반 javascript와는 다르게 php에서는 전역변수를 사용하기 위해 global 라는 것을 변수 앞에 붙여줘야 제대로 전역 변수를 사용할 수 있음

 

  • global $변수;
<?php	
 	$num = 10;
	function f() {
		echo "전역변수에서 가져온 num의 값은 {$num} <br>";
		global $num;
		echo "함수 내부에서 호출한 전역변수 num의 값은 {$num}<br>";
	}
	f();
	echo "함수 밖에서 호출한 전역변수 num의 값은 {$num}";

?>


  • 슈퍼 글로벌(superglobal)

- PHP는 미리 정의된 전역 변수인 슈퍼 글로벌(superglobal)을 제공합니다.

- 이러한 슈퍼 글로벌은 특별한 선언 없이 스크립트 내의 어디에서라도 바로 사용할 수 있습니다.

 

1. $GLOBALS
2. $_SERVER
3. $_GET
4. $_POST
5. $_FILES
6. $_COOKIE
7. $_SESSION
8. $_REQUEST
9. $_ENV

 


  • PHP는 모든 전역 변수를 $GLOBALS 배열에 저장합니다.

-이 배열에 인덱스로 변수의 이름을 사용하면, 해당 전역 변수의 값에 접근할 수 있습니다.

-이 배열은 함수 내부에서도 접근할 수 있으며, 이 배열을 통해 바로 전역 변수의 값을 변경할 수도 있습니다.

- < . >은 PHP에서 문자열 연결 연산자입니다. 두 문자열을 이어붙이는 역할을 합니다.

<?php	
	$name = "짱구";
	function active() {
		echo "전역변수 선언x name값은 {$name}<br>";
		
		echo "전역변수로 name값 가져오기 {$GLOBALS['name']}<br>";
	}
	active();

?>

결과값

 


  • $_SERVER

- $_SERVER 는 헤더, 경로, 그리고 스크립트 위치에 대한 정보를 담고 있는 PHP 수퍼전역변수

 

  1. $_SERVER['PHP_SELF']: 현재 실행 중인 스크립트 파일의 경로와 파일명. http://example.com/myscript.php 라면, $_SERVER['PHP_SELF']는 /myscript.php를 반환합니다.
  2. $_SERVER['SERVER_NAME']: 현재 호스팅된 서버의 이름. www.example.com 또는 IP 주소가 될 수 있습니다.
  3. $_SERVER['HTTP_HOST']: 현재 요청한 호스트 이름. 이 값은 HTTP 요청 헤더에서 호스트 부분을 가져옵니다.
  4. $_SERVER['HTTP_REFERER']: 현재 페이지로 유입된 이전 페이지의 URL을 나타냅니다. 이 값은 HTTP Referer 헤더에서 가져옵니다.
  5. $_SERVER['HTTP_USER_AGENT']: 현재 요청을 보낸 클라이언트의 사용자 에이전트 정보. 이 정보는 브라우저와 운영체제 등에 관한 정보를 포함합니다.
  6. $_SERVER['SCRIPT_NAME']: 현재 스크립트 파일의 경로와 파일명. $_SERVER['PHP_SELF']와 유사하지만 서버 환경에 따라 차이가 있을 수 있습니다.
<?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'];
?>


  • $_GET

- $_GETURL을 통해 전송된 매개변수를 받아올 때 사용됩니다. 일반적으로 링크나 폼 전송 등에 사용됩니다.

<form action="phpinfo.php" method="get">
    Name: <input type="text" name="name"><br>
    Age: <input type="text" name="age"><br>
    <input type="submit" value="Submit">
</form>
<?php	


$name = $_GET['name'];
$age = $_GET['age'];

echo "Hello, $name! You are $age years old.";
?>


  • $_POST

- $_POSTHTTP POST 요청을 통해 전송된 변수를 받아올 때 사용됩니다. 보안적으로 더 안전한 방법입니다.

<form action="phpinfo.php" method="post">
    Name: <input type="text" name="name"><br>
    Age: <input type="text" name="age"><br>
    <input type="submit" value="Submit">
</form>
<?php	


$name = $_POST['name'];
$age = $_POST['age'];

echo "Hello, $name! You are $age years old.";
?>


  • $_FILES

-$_FILES파일 업로드 시에 사용됩니다. 주로 파일 업로드 폼과 함께 사용

 

  1. $target_dir = "uploads/";
    • 이 코드는 업로드된 파일을 저장할 디렉터리를 지정합니다. 여기서는 "uploads/"로 설정되어 있습니다. 디렉터리의 상대 경로를 사용했습니다.
  2. $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    • 이 코드는 업로드된 파일의 최종 저장 경로와 파일명을 지정합니다. $_FILES["fileToUpload"]["name"]은 업로드된 파일의 원래 이름입니다. basename() 함수를 사용하여 파일명에서 디렉터리 경로를 제거합니다. 그리고 이를 $target_dir과 합쳐 최종 경로를 만듭니다.

 

 

  1. $uploadOk = 1;
    • 이 변수는 파일 업로드가 가능한지를 나타내는 플래그입니다. 일단 1로 설정되어 있습니다.
  2. if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    • 이 부분은 실제로 파일을 업로드하는 부분입니다. move_uploaded_file() 함수를 사용하여 임시 파일을 목적지로 옮깁니다.
    • 첫 번째 매개변수 $_FILES["fileToUpload"]["tmp_name"]은 업로드된 파일의 임시 경로입니다.
    • 두 번째 매개변수 $target_file은 파일이 최종적으로 저장될 경로와 파일명입니다.
  3. echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
    • 파일이 성공적으로 업로드되면 이 부분이 실행됩니다. 업로드된 파일의 이름을 포함한 메시지가 출력됩니다. htmlspecialchars() 함수는 HTML 특수 문자를 이스케이프하여 보안을 강화합니다.
  4. } else {
    • 파일 업로드에 실패하면 이 부분이 실행됩니다.
  5. echo "Sorry, there was an error uploading your file.";
    • 파일 업로드에 실패한 경우 이 메시지가 출력됩니다.
<form action="phpinfo.php" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Image" name="submit">
</form>
<?php	
	$target_dir = "uploads/";
	$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
	$uploadOk = 1;

	if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
	    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
	} else {
	    echo "Sorry, there was an error uploading your file.";
	}
?>

 


  • $_COOKIE는 클라이언트의 쿠키 정보를 받아올 때 사용됩니다.
<?php	
	 setcookie("user", "John Doe", time() + 3600, "/");
   	 if(isset($_COOKIE["user"])) {
	        echo "Welcome " . $_COOKIE["user"] . "!";
	    } else {
	        echo "Cookie not set!";
	    }
?>


  • $_SESSION

-$_SESSION세션 변수에 접근할 때 사용됩니다. 세션은 서버 측에서 데이터를 저장하는 방법입니다.

<?php	
	session_start();
	$_SESSION["username"] = "JohnDoe";
	$_SESSION["email"] = "john@example.com";
	echo "Welcome, " . $_SESSION["username"];
?>

 


  • $_REQUEST

-HTTP 요청(GET, POST, 그리고 COOKIE)에 의해 전송된 데이터를 받아옵니다. 이 변수를 사용하면 클라이언트가 전송한 데이터를 더 쉽게 처리할 수 있습니다

<form name ="frmtest" method="POST" action="phpinfo.php?id1=foo">
    	id2 : <input type ="text" name ="id2"><br>
        <input type ="submit" value="확인">
</form>


<?php
echo "GET1 : ".$_GET["id1"] . "<br>";
echo "GET2 : ".$_GET["id2"] . "<br>";

echo "<br>";
echo "POST1 : ".$_POST["id1"] . "<br>";
echo "POST2 : ".$_POST["id2"] . "<br>";


echo "REQUEST1 : ".$_REQUEST["id1"] . "<br>";
echo "REQUEST2 : ".$_REQUEST["id2"] . "<br>";
?>


  • $_ENV

-서버 환경 변수에 대한 정보를 담고 있는 슈퍼글로벌 변수입니다. 예를 들어, 서버의 운영 체제나 설정에 관한 정보를 얻을 수 있습니다.

 


  • 정적변수 static

-PHP에서의 static: PHP에서 static은 주로 함수 내에서 사용되며, 함수 내에서 변수를 정의할 때 해당 변수가 함수가 호출될 때마다 초기화되지 않고 이전 호출에서의 값을 유지하도록 합니다.

-하지만 지역 변수처럼 해당 함수 내부에서만 접근할 수 있습니다.

<?php
	function counter()
	{
		static $count = 0;		// 정적 변수로 선언함
		echo "함수 내에서 선언한 정적 변수 count의 값은 {$count}입니다.<br>";
		$count++;
	}
	counter();
	counter();
	counter();
?>

 


-정적 프로퍼티에 값을 할당할 때는 = 연산자를 사용

-마찬가지로 객체를 생성할 필요 없이 '클래스::메소드()'로 사용

<?php

class StaticTest{
    public static $a = "static으로 생성한 프로퍼티 <br/>";

    public static function function1(){
        $a = "static으로 생성한 메소드";
        echo "$a";
    }
}

echo StaticTest::$a;
StaticTest::function1();

StaticTest::$a="hoho";
echo StaticTest::$a;
?>

static으로 만든 것 hoho로 바꾼 결과값


  • 함수내에서 static vs class에서 static 차이


  • 자바 vs php에서 static차이점? (위의 내용참고 클래스에서 쓰면 비슷한듯)