PHP - GET 和 POST 方法


由于 PHP 主要用于 Web 应用程序开发,因此浏览器客户端发送的数据主要使用 HTTP 请求方法的 GET POST 类型。

HTTP 协议还定义了将请求发送到服务器的其他方法。它们是 PUTDELETEHEAD OPTIONS(除了 GET POST 方法之外)。在本章中,我们将重点介绍 PHP 如何处理 GET POST 方法。

GET 方法

GET 方法发送附加到页面请求的编码用户信息。页面和编码信息由 字符分隔。

 http://www.test.com/index.htm?name1=value1&name2=value2
  • GET 方法会生成一个长字符串,该字符串显示在服务器日志中浏览器的 Location: 框中。
  • GET 方法最多只能发送 1024 个字符。
  • 如果有密码或其他敏感信息要发送到服务器,切勿使用 GET 方法。
  • GET 不能用于将二进制数据(如图像或 Word 文档)发送到服务器。
  • 可以使用 QUERY_STRING 环境变量访问 GET 方法发送的数据。
  • PHP 提供 $_GET 个关联数组,用于使用 GET 方法访问所有发送的信息。

通过将源代码放入 test.php 脚本中来尝试以下示例。


<?php
   if( $_GET["name"] || $_GET["age"] ) {
      echo "Welcome ". $_GET['name']. "<br />";
      echo "You are ". $_GET['age']. " years old.";
      
      exit();
   }
?>
<form action = "<?php $_PHP_SELF ?>" method = "GET">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

将产生以下结果 -

形式

POST 方法

POST 方法通过 HTTP 标头传输信息。该信息按照 GET 方法的情况进行编码,并放入名为 QUERY_STRING 的标头中。

  • POST 方法对要发送的数据大小没有任何限制。
  • POST 方法可用于发送 ASCII 和二进制数据。
  • POST 方法发送的数据通过 HTTP 标头,因此安全性取决于 HTTP 协议。通过使用可靠的 HTTP,您可以确保您的信息是安全的。
  • PHP 提供了 $_POST 个关联数组,用于使用 POST 方法访问所有发送的信息。

通过将源代码放入 test.php 脚本中来尝试以下示例。


<?php
   if( $_POST["name"] || $_POST["age"] ) {
      if (preg_match("/[^A-Za-z'-]/",$_POST['name'] )) {
         die ("无效名称,名称应为字母");
      }
      echo "Welcome ". $_POST['name']. "<br />";
      echo "You are ". $_POST['age']. " years old.";
      
      exit();
   }
?>
<form action = "<?php $_PHP_SELF ?>" method = "POST">
   Name: <input type = "text" name = "name" />
   Age: <input type = "text" name = "age" />
   <input type = "submit" />
</form>

将产生以下结果 -

形式

GET 和 POST 之间的区别

GET POST 方法之间的主要区别在于,虽然附加到 URL 的请求参数在浏览器的 URL 中公开,但 POST 数据包含在消息正文中,而不是在 URL 中显示。因此,不应使用 GET 方法将敏感数据发送到服务器。

其次,GET 方法中的请求数据不能超过 2048 个字符,并且只能由 ASCII 字符组成,而使用 POST 方法,请求数据也可以为二进制(POST 数据的默认最大大小由文件中的 post_max_size 设置决定 php.ini 

PHP 提供了以下三个超全局变量来检索和处理请求参数 -

  • $_GET − 一个关联数组,用于使用 GET 方法访问所有发送的信息。
  • $_POST − 一个关联数组,用于使用 POST 方法访问所有发送的信息。
  • $_REQUEST − 一个关联数组,可用于从使用 GET POST 方法发送的表单数据中获取结果。

$_GET 数组

您可以以直接附加到 URL 的查询字符串的形式传递请求参数。

将文档根文件夹 (htdocs) 的以下 PHP 脚本保存为 “hello.php” −


<?php
   echo "名: " . $_REQUEST['first_name'] . " " . 
      "姓: " . $_REQUEST['last_name'] . "";
?>

在浏览器窗口中输入 http://localhost/hello.php?first_name=Amar&last_name=Sharma 作为 URL:

从请求中填充 $_GET 数组,输出如下所示 -

名: Amar 姓: Sharma

如果 _GET 数组的方法属性为 GET,则还可以使用 HTML 表单数据填充 $ 数组。

使用以下 HTML 表单收集数据并将其发送到 “hello.php”。在文档根目录下,将以下脚本另存为 “hello.html” -


<form action="hello.php" method="get">
   First Name: <input type="text" name="first_name"/>  <br/>
   Last Name: <input type="text" name="last_name" />
   <input type="submit" value="Submit" />
</form>

在浏览器中,输入 URL “http://localhost/hello.html” -

PHP Get Post

您应该在浏览器窗口中获得类似的输出。

$_POST 数组

使用 POST 请求将数据发送到服务器的最简单方法是将 HTML 表单的方法属性指定为 POST。假设浏览器中的 URL 是 “http://localhost/hello.php”,则 method=POST 在 HTML 表单 “hello.html” 中设置,如前面的示例所示 -


<form action="hello.php" method="post">
   First Name: <input type="text" name="first_name"/>  <br/>
   Last Name: <input type="text" name="last_name" />
   <input type="submit" value="Submit" />
</form> 

hello.php”脚本(在文档根文件夹中)检索 $_POST 数组中的表单数据,并将其作为 HTTP 响应呈现回浏览器 -


<?php
   echo "First name: " . $_POST['first_name'] . " " . 
      "Last Name: " . $_POST['last_name'] . "";
?>

在浏览器中打开“http://localhost/hello.html”。输入的数据由服务器检索,并呈现回客户端,如前面的示例所示。