这更像是一个“理解”问题,一个具体的例子。我来自Python / R /科学计算背景,我经常编译或通过解释器进行通信。但一切都通常在机器上,所以服务器/客户端之间没有“通信”。
我现在正在尝试学习PHP(希望让用户从Web界面运行我的脚本)并且好奇在POST期间会发生什么。
考虑以下脚本:
<!DOCTYPE html>
<html>
<head>
<title>Form Testing</title>
<meta charset="utf-8"/>
</head>
<body>
<?php
if($_POST['formSubmit'] == "Submit") {
echo "Post Status is: ".$_POST['formSubmit']."\n";
$varMovie = $_GET['formMovie'];
echo "Your Favorite Movie Was: ".$varMovie;
}else{
echo "Post Status is: ".$_GET['formSubmit'] ."\n";
}
?>
<form action="index.php" method="post">
Which is your favorite movie?
<input type="text" name="formMovie" maxlength="50">
<input type="submit" name="formSubmit" value="Submit">
</form>
</body>
</html>
我得到提交按钮将等效的python字典(关联数组?)发送到下一页。然后命令$ _POST ['formSubmit']拉出值。
但是当我点击提交按钮到页面加载时,值之间的位置。换句话说,在sumbit按钮之后,实际发生了什么?显然,页面必须在某处创建这个关联数组并以某种方式传递它,但我不确定它是如何做到的。
获得的想法似乎更清楚。附加了URL,因此PHP引擎可以读取URL字符串并找到所有变量的值(我假设发生的是什么)?
感谢您的帮助!
答案 0 :(得分:3)
HTTP GET
通过查询字符串中的url传递其所有数据:
http://example.com/script.php?key=value
^^^^^^^^^^---GET query parameters
这可以通过以下方式完成:
<form method="GET" action="http://example.com/script.php"
<input type="hidden" name="key" value="value" />
<input type="submit" />
</form>
此URL成为HTTP请求标头的一部分:
GET /script.php?key=value HTTP/1.1
Host: example.com
Header1: value1
Header2: value2
Cookie: something=whatever
GET
请求没有“正文”部分 - 请求的整个请求包含在请求标题的其余部分中。
如果需要,HTTP POST
也可以有查询参数,但通常通过POST操作提交的任何内容都会在HTTP请求“body”部分中发送数据:
POST /script.php?key=value HTTP/1.1
Host: example.com
Header1: value1
Header2: value2
Cookie: something=whatever
foo=bar
这将由以下形式生成:
<form method="POST" action="/script.php?key=value" />
<input type="hidden" name="foo" value="bar" />
<input type="submit" />
</form>
请注意标题与键foo
之间的空白行。该行是网络服务器如何知道标题何时完成以及正文开始的时间。
对于此特定样本的POSt请求,您最终得到:
$_GET['key'] = 'value'; // from the requested URL
$_POST['foo'] = 'bar'; // from the request body
PHP中还有$_REQUEST
,它是一个内部的PHP构造,它将各种来源(包括$ _GET和$ _POST)组合成一个单一的数据结构,但它的数据来自完全相同的源。 / p>