외부에서 오는 변수들

HTML 폼 (GET과 POST)

폼이 PHP 스크립트로 전달될때, 그 폼안의 정보가 스크립트내에서 자동으로 사용할 수 있습니다. 이 정보에 접근할 수 있는 몇 가지가 있습니다. 예를 들면 다음과 같습니다.

Example #1 단순한 HTML 폼

                  
<form action="foo.php" method="post">
    이름:  <input type="text" name="username" /><br />
    메일: <input type="text" name="email" /><br />
    <input type="submit" name="submit" value="전송합니다!" />
</form>
                  
                

HTML 폼에서 데이터에 접근하는 방법은 두 가지뿐입니다. 현재 사용 가능한 방법은 다음과 같습니다.

예제 #2 간단한 POST HTML 양식에서 데이터 접근

                  
<?php
echo $_POST['username'];
echo $_REQUEST['username'];
?>
                  
                

GET 양식을 사용하는 것은 적절한 GET 사전 정의 변수를 대신 사용한다는 점을 제외하고는 유사합니다. GET은 QUERY_STRING(URL에서 '?' 뒤의 정보)에도 적용됩니다. 예를 들어 http://www.example.com/test.php?id=3에는 $_GET['id']로 액세스할 수 있는 GET 데이터가 포함되어 있습니다. $_REQUEST도 참조하세요.

메모: 변수 이름의 점과 공백은 밑줄로 변환됩니다. 예를 들어 <input name="a.b" />$_REQUEST["a_b"]가 됩니다.

PHP는 또한 양식 변수의 컨텍스트에서 배열을 이해합니다(관련 FAQ 참조). 예를 들어 관련 변수를 함께 그룹화하거나 이 기능을 사용하여 다중 선택 입력에서 값을 검색할 수 있습니다. 예를 들어 양식을 자체에 게시하고 제출 시 데이터를 표시해 보겠습니다.

예제 #3 더 복잡한 양식 변수

                  
<?php
if ($_POST) {
    echo '<pre>';
    echo htmlspecialchars(print_r($_POST, true));
    echo '</pre>';
}
?>
<form action="" method="post">
    Name:  <input type="text" name="personal[name]" /><br />
    Email: <input type="text" name="personal[email]" /><br />
    Beer: <br />
    <select multiple name="beer[]">
        <option value="warthog">Warthog</option>
        <option value="guinness">Guinness</option>
        <option value="stuttgarter">Stuttgarter Schwabenbräu</option>
    </select><br />
    <input type="submit" value="submit me!" />
</form>
                  
                

참고: 외부 변수 이름이 유효한 배열 구문으로 시작하는 경우 후행 문자는 자동으로 무시됩니다. 예를 들어, <input name="foo[bar]baz">$_REQUEST['foo']['bar']가 됩니다.

변수명으로 IMAGE SUBMIT

양식을 제출할 때 다음과 같은 태그가 있는 표준 제출 버튼 대신 이미지를 사용할 수 있습니다.

<input type="image" src="image.gif" name="sub" />
                

사용자가 이미지의 아무 곳이나 클릭하면 함께 제공되는 양식이 두 개의 추가 변수인 sub_xsub_y와 함께 서버로 전송됩니다. 여기에는 이미지 내에서 사용자가 클릭한 좌표가 포함됩니다. 경험자는 브라우저에서 보낸 실제 변수 이름에 밑줄이 아닌 마침표가 포함되어 있지만 PHP는 마침표를 자동으로 밑줄로 변환합니다.

HTTP Cookies

PHP는 » RFC 6265에 정의된 대로 HTTP 쿠키를 투명하게 지원합니다. 쿠키는 원격 브라우저에 데이터를 저장하여 재방문 사용자를 추적하거나 식별하는 메커니즘입니다. setcookie() 함수를 사용하여 쿠키를 설정할 수 있습니다. 쿠키는 HTTP 헤더의 일부이므로 출력을 브라우저로 보내기 전에 SetCookie 함수를 호출해야 합니다. 이것은 header() 함수와 동일한 제한 사항입니다. 그러면 $_COOKIE$_REQUEST와 같은 적절한 쿠키 데이터 배열에서 쿠키 데이터를 사용할 수 있습니다. 자세한 내용과 예제는 setcookie() 매뉴얼 페이지를 참조하십시오.

참고: 각각 PHP 7.2.34, 7.3.23 및 7.4.11부터 수신 쿠키의 이름은 보안상의 이유로 더 이상 URL 디코딩되지 않습니다.

단일 쿠키 변수에 여러 값을 할당하려는 경우 배열로 할당할 수 있습니다. 예를 들어:

                  
<?php
  setcookie("MyCookie[foo]", 'Testing 1', time()+3600);
  setcookie("MyCookie[bar]", 'Testing 2', time()+3600);
?>
                  
                

MyCookie는 이제 스크립트에서 단일 배열이지만 두 개의 개별 쿠키를 생성합니다. 여러 값을 가진 하나의 쿠키만 설정하려면 먼저 값에 serialize() 또는 explode()를 사용하는 것을 고려하십시오.

경로나 도메인이 다른 경우를 제외하고 쿠키는 브라우저에서 동일한 이름으로 이전 쿠키를 대체합니다. 따라서 장바구니 응용 프로그램의 경우 카운터를 유지하고 이를 전달하는 것이 좋습니다. 즉.

예제 #4 setcookie() 예제

                  
<?php
if (isset($_COOKIE['count'])) {
    $count = $_COOKIE['count'] + 1;
} else {
    $count = 1;
}
setcookie('count', $count, time()+3600);
setcookie("Cart[$count]", $item, time()+3600);
?>
                  
                
유입되는 변수명에 존재하는 점(dot)

일반적으로 PHP는 변수가 스크립트에 전달될 때 변수 이름을 변경하지 않습니다. 그러나 점(마침표, 마침표)은 PHP 변수 이름에서 유효한 문자가 아닙니다. 그 이유는 다음과 같습니다.

                  
<?php
$varname.ext;  /* invalid variable name */
?>
                  
                

이제 파서가 보는 것은 $varname이라는 변수, 문자열 연결 연산자, 베어스트링(즉, 알려진 키 또는 예약어와 일치하지 않는 인용되지 않은 문자열) 'ext'가 옵니다. 분명히 이것은 의도한 결과가 아닙니다. 이러한 이유로 PHP는 들어오는 변수 이름의 모든 점을 밑줄로 자동으로 대체한다는 점에 유의하는 것이 중요합니다.

변수 타입 결정하기

PHP는 변수의 유형을 결정하고 필요에 따라 (일반적으로) 변환하기 때문에 주어진 변수가 한 번에 어떤 유형인지 항상 명확하지 않습니다. PHP에는 gettype(), is_array(), is_float(), is_int(), is_object(), is_string()과 같이 변수의 유형을 알아내는 여러 함수가 포함되어 있습니다. 자료형에 대한 장도 참조하십시오.

HTTP는 텍스트 프로토콜이므로 $_POST$_GET과 같은 Superglobal 배열에 있는 대부분의 콘텐츠는 문자열로 유지됩니다. PHP는 값을 특정 유형으로 변환하지 않습니다. 아래 예에서 $_GET["var1"]에는 문자열 "null"이 포함되고 $_GET["var2"]에는 문자열 "123"이 포함됩니다.

/index.php?var1=null&var2=123
                
Changelog
Version Description
7.2.34, 7.3.23, 7.4.11 들어오는 쿠키의 이름은 보안상의 이유로 더 이상 URL 디코딩되지 않습니다.