>  기사  >  백엔드 개발  >  PHP 외부의 변수는 무엇입니까?

PHP 외부의 변수는 무엇입니까?

怪我咯
怪我咯원래의
2017-06-20 10:06:43991검색

HTML 양식(GET 및 POST)

양식이 PHP 스크립트에 제출되면 양식의 정보가 스크립트에서 자동으로 사용 가능해집니다. 이 정보에 액세스하는 방법은 다양합니다. 예를 들면 다음과 같습니다.

예제 #1 간단한 HTML 양식

<form action="foo.php" method="POST">
    Name:  <input type="text" name="username"><br />
    Email: <input type="text" name="email"><br />
    <input type="submit" name="submit" value="Submit me!" />
</form>

특정 설정 및 개인 선호도에 따라 HTML 형식의 데이터에 액세스하는 방법은 다양합니다. 예:

예제 #2 간단한 POST HTML 양식에서 데이터에 액세스

<?php
// 自 PHP 4.1.0 起可用
   echo $_POST[&#39;username&#39;];
   echo $_REQUEST[&#39;username&#39;];
   
   import_request_variables(&#39;p&#39;, &#39;p_&#39;);
   echo $p_username;// 自 PHP 5.0.0 起,这些长格式的预定义变量
// 可用 register_long_arrays 指令关闭。   echo $HTTP_POST_VARS[&#39;username&#39;];// 如果 PHP 指令 register_globals = on 时可用。不过自
// PHP 4.2.0 起默认值为 register_globals = off。
// 不提倡使用/依赖此种方法。   echo $username;
?>

GET 양식을 사용하는 것도 비슷하지만 적절한 GET 사전 정의 변수가 사용됩니다. GET은 QUERY_STRING(URL에서 "?" 뒤에 오는 정보)과도 작동합니다. 예를 들어 http://www.example.com/test.php?id=3에는 $_GET['id'] 로 액세스할 수 있는 GET 데이터가 포함되어 있습니다. $_REQUEST 및 import_request_variables() 를 참조하세요.

참고:

$_POST 및 $_GET과 같은 슈퍼전역 배열은 PHP 4.1.0부터 사용할 수 있습니다.

참고:

변수 이름의 점과 공백은 밑줄로 변환됩니다. 예를 들어 66df9299ffe54b5001d938858b4213b8는 $_REQUEST["a_b"]가 됩니다.

위와 같이 PHP 4.2.0 이전에는 Register_globals의 기본값이 on입니다. PHP 커뮤니티는 모든 사람이 이 지시어에 의존하지 말 것을 권장하며 이 지시어가 꺼져 있다고 가정하여 코딩할 것을 권장합니다.

참고:

magic_quotes_gpc 구성 지시문은 Get, Post 및 Cookie 값에 영향을 미칩니다. 켜져 있으면 값("PHP!")이 자동으로 ("PHP!")로 변환됩니다. 10여 년 전에는 데이터베이스 삽입에 이러한 이스케이프가 필요했는데, 이제는 더 이상 사용되지 않으므로 꺼야 합니다. addlashes() , stripslashes() 및 Magic_quotes_sybase를 참조하세요.

PHP는 양식 변수의 맥락에서도 배열을 이해합니다(관련 FAQ 참조). 예를 들어 관련 변수를 그룹화하거나 이 기능을 사용하여 다중 선택 입력 상자에서 값을 가져올 수 있습니다. 예를 들어, 자신에게 양식을 게시하고 제출 시 데이터를 표시합니다.

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

<?php
if (isset( $_POST [ &#39;action&#39; ]) &&  $_POST [ &#39;action&#39; ] ==  &#39;submitted&#39; ) {
    echo  &#39;<pre class="brush:php;toolbar:false">&#39; ;

     print_r ( $_POST );
    echo  &#39;<a href="&#39; .  $_SERVER [ &#39;PHP_SELF&#39; ] . &#39;">Please try again</a>&#39; ;

    echo  &#39;
' ; } else { ?>
Name:
Email:
Beer:

IMAGE SUBMIT 변수 이름

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

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

사용자가 이미지의 아무 곳이나 클릭하면 해당 양식이 서버로 전송되고 두 개의 변수 sub_x와 sub_y가 추가됩니다. 여기에는 사용자가 클릭한 이미지의 좌표가 포함됩니다. 숙련된 사용자는 브라우저에서 보낸 실제 변수 이름에 밑줄 대신 점이 포함되어 있음(예: sub.x 및 sub.y)을 알 수 있지만 PHP는 자동으로 점을 밑줄로 변환합니다.

HTTP 쿠키

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

쿠키 변수에 여러 값을 할당하려면 배열에 할당해야 합니다. 예:

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

MyCookie가 스크립트에서 단일 배열이더라도 이렇게 하면 두 개의 별도 쿠키가 생성됩니다. 단 하나의 쿠키에 여러 값을 설정하려면 먼저 해당 값에 대해 serialize() 또는Explode() 사용을 고려하세요.

경로나 도메인이 다르지 않는 한 쿠키는 브라우저에서 이전 쿠키를 동일한 이름으로 대체합니다. 따라서 장바구니 프로그램은 카운터를 유지하고 이를 함께 전달할 수 있습니다. 예:

예제 #4 setcookie()의 예

<?php
if (isset( $_COOKIE [ &#39;count&#39; ])) {
     $count  =  $_COOKIE [ &#39;count&#39; ] +  1 ;
} else {
     $count  =  1 ;
}
setcookie ( &#39;count&#39; ,  $count ,  time ()+ 3600 );
setcookie ( "Cart[ $count ]" ,  $item ,  time ()+ 3600 );
?>

变量名中的点

通常,PHP 不会改变传递给脚本中的变量名。然而应该注意到点(句号)不是 PHP 变量名中的合法字符。至于原因,看看:

<?php
$varname . ext ;   
?>

这时,解析器看到是一个名为 $varname 的变量,后面跟着一个字符串连接运算符,后面跟着一个裸字符串(即没有加引号的字符串,且不匹配任何已知的健名或保留字)'ext'。很明显这不是想要的结果。

出于此原因,要注意 PHP 将会自动将变量名中的点替换成下划线。

确定变量类型

因为 PHP 会判断变量类型并在需要时进行转换(通常情况下),因此在某一时刻给定的变量是何种类型并不明显。PHP 包括几个函数可以判断变量的类型,例如: gettype() , is_array() , is_float() , is_int() , is_object()和 is_string() 

위 내용은 PHP 외부의 변수는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.