由于 PHP 主要用于 Web 应用程序开发,因此浏览器客户端发送的数据主要使用 HTTP 请求方法的 GET 和 POST 类型。
HTTP 协议还定义了将请求发送到服务器的其他方法。它们是 PUT、DELETE、HEAD 和 OPTIONS(除了 GET 和 POST 方法之外)。在本章中,我们将重点介绍 PHP 如何处理 GET 和 POST 方法。
GET 方法
GET 方法发送附加到页面请求的编码用户信息。页面和编码信息由 ?字符分隔。
- 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 数组,输出如下所示 -
如果 _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” -
您应该在浏览器窗口中获得类似的输出。
$_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”。输入的数据由服务器检索,并呈现回客户端,如前面的示例所示。