Home > Backend Development > PHP Tutorial > form - php post提交数据 $_POST为空 file_get_content(php://input)可以获取到 这是为什么呢?

form - php post提交数据 $_POST为空 file_get_content(php://input)可以获取到 这是为什么呢?

WBOY
Release: 2016-06-06 20:16:06
Original
1470 people have browsed it

php post提交数据 $_POST为空 file_get_content(php://input)可以获取到 这是为什么呢?
环境是用MAMP安装的
form提交的代码如下:

<code><div class="login_cont">
<form action="doLogin.php" method="post">
        <ul class="login">
            <li class="l_tit">管理员帐号</li>
            <li class="mb_10"><input type="text" name="username" placeholder="请输入管理员帐号" class="login_input user_icon"></li>
            <li class="l_tit">密码</li>
            <li class="mb_10"><input type="password" name="password" class="login_input password_icon"></li>
            <li class="l_tit">验证码</li>
            <li class="mb_10"><input type="text" name="verify" class="login_input password_icon"></li>
            <img src="getVerify.php" alt="">
            <li class="autoLogin">
<input type="checkbox" id="a1" class="checked" name="autoFlag" value="1"><label for="a1">自动登陆(一周内自动登陆)</label>
</li>
            <li><input type="submit" value="" class="login_btn"></li>
        </ul>
    </form>
</div>
</code>
Copy after login
Copy after login

doLogin.php的代码如下

<code>include_once '../include.php';

$username = $_POST['username'];
$password = md5($_POST['password']);
$verify = $_POST['verify'];
$session_verify = $_SESSION['verify'];
var_dump($_POST);
var_dump($_SERVER);

</code>
Copy after login
Copy after login

用花瓶抓包的结果:
form - php post提交数据 $_POST为空 file_get_content(php://input)可以获取到 这是为什么呢?

回复内容:

php post提交数据 $_POST为空 file_get_content(php://input)可以获取到 这是为什么呢?
环境是用MAMP安装的
form提交的代码如下:

<code><div class="login_cont">
<form action="doLogin.php" method="post">
        <ul class="login">
            <li class="l_tit">管理员帐号</li>
            <li class="mb_10"><input type="text" name="username" placeholder="请输入管理员帐号" class="login_input user_icon"></li>
            <li class="l_tit">密码</li>
            <li class="mb_10"><input type="password" name="password" class="login_input password_icon"></li>
            <li class="l_tit">验证码</li>
            <li class="mb_10"><input type="text" name="verify" class="login_input password_icon"></li>
            <img src="getVerify.php" alt="">
            <li class="autoLogin">
<input type="checkbox" id="a1" class="checked" name="autoFlag" value="1"><label for="a1">自动登陆(一周内自动登陆)</label>
</li>
            <li><input type="submit" value="" class="login_btn"></li>
        </ul>
    </form>
</div>
</code>
Copy after login
Copy after login

doLogin.php的代码如下

<code>include_once '../include.php';

$username = $_POST['username'];
$password = md5($_POST['password']);
$verify = $_POST['verify'];
$session_verify = $_SESSION['verify'];
var_dump($_POST);
var_dump($_SERVER);

</code>
Copy after login
Copy after login

用花瓶抓包的结果:
form - php post提交数据 $_POST为空 file_get_content(php://input)可以获取到 这是为什么呢?

首先php://input是不受php.ini设置行为的影响,可以直接获取到post的原始数据的.

$_POST是有受限于头限制的.英文手册(中文手册没有这段,略坑)中有如下介绍:

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.

也就是你的Content-Type 只有是application/x-www-form-urlencoded 或者multipart/form-data的时候,才会被预定义的变量$_POST收进去.

另外一种情况可以考虑用$HTTP_RAW_POST_DATA,这个跟php://input获取到的数据是一样的,但是这个变量有受到php.ini中的选项always_populate_raw_post_data的限制.

form action="doLogin.php" 这里action的地址写成全路径试试。

action="./doLogin.php"

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template