PHP 像 $_POST 这样的超全局变量如何被 HTML 表单填充?
How do PHP superglobals like $_POST get populated by an HTML form?
我知道如果我创建一个 html 表单并将 action 属性设置为 PHP 脚本,我可以通过超级全局 $_[=25 访问 POST 数据=].我的问题是这是怎么发生的?
如果我有这样一个简单的表格:
<form action="script.php" method="POST">
<input type="text" name="fname">
<input type="submit" value="Submit">
</form>
还有一个像这样的简单脚本:
<?php
echo $_POST["name"];
?>
什么机制将来自 POST 请求的原始表单数据带入 PHP?是否有某种 CGI 脚本?另一种语言的等价物是什么,比如 Ruby?
An associative array of variables passed to the current script via the
HTTP POST method when using application/x-www-form-urlencoded or
multipart/form-data as the HTTP Content-Type in the request.
$HTTP_POST_VARS contains the same initial information, but is not a
superglobal. (Note that $HTTP_POST_VARS and $_POST are different
variables and that PHP handles them as such)
https://www.php.net/manual/en/reserved.variables.post.php
它只是一个超级全局变量,PHP 解释器将所有 post 数据存储在其中,直到清除它的下一个请求。
当您通过浏览器提交表单时,浏览器将获取数据并将其序列化,然后在 HTTP/HTTPS 请求中将其发送到 Web 服务器。
对于 GET 表单,数据被序列化并附加到 URL 中的字符串查询,例如 myphp.php?field1=foo&field2=bar
对于 POST 数据,它被插入到请求的正文中。
基于请求的类型 PHP 引擎随后将解析接收到的数据,为了您的方便,url 对其进行解码并用它填充超全局变量。在上面的例子中,数据将是这样的:
$_GET = [
'field1' => 'foo',
'field2' => 'bar'
];
这是 PHP 的一个很好的特性,与 PERL 之类的语言相比,后者强制您自己解析输入数据。
Additionally PHP offers a way to read the input stream directly for the raw data which you would normally receive.
我知道如果我创建一个 html 表单并将 action 属性设置为 PHP 脚本,我可以通过超级全局 $_[=25 访问 POST 数据=].我的问题是这是怎么发生的?
如果我有这样一个简单的表格:
<form action="script.php" method="POST">
<input type="text" name="fname">
<input type="submit" value="Submit">
</form>
还有一个像这样的简单脚本:
<?php
echo $_POST["name"];
?>
什么机制将来自 POST 请求的原始表单数据带入 PHP?是否有某种 CGI 脚本?另一种语言的等价物是什么,比如 Ruby?
An associative array of variables passed to the current script via the HTTP POST method when using application/x-www-form-urlencoded or multipart/form-data as the HTTP Content-Type in the request.
$HTTP_POST_VARS contains the same initial information, but is not a superglobal. (Note that $HTTP_POST_VARS and $_POST are different variables and that PHP handles them as such)
https://www.php.net/manual/en/reserved.variables.post.php
它只是一个超级全局变量,PHP 解释器将所有 post 数据存储在其中,直到清除它的下一个请求。
当您通过浏览器提交表单时,浏览器将获取数据并将其序列化,然后在 HTTP/HTTPS 请求中将其发送到 Web 服务器。
对于 GET 表单,数据被序列化并附加到 URL 中的字符串查询,例如 myphp.php?field1=foo&field2=bar
对于 POST 数据,它被插入到请求的正文中。
基于请求的类型 PHP 引擎随后将解析接收到的数据,为了您的方便,url 对其进行解码并用它填充超全局变量。在上面的例子中,数据将是这样的:
$_GET = [
'field1' => 'foo',
'field2' => 'bar'
];
这是 PHP 的一个很好的特性,与 PERL 之类的语言相比,后者强制您自己解析输入数据。
Additionally PHP offers a way to read the input stream directly for the raw data which you would normally receive.