微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 没有Content-type的空$_POST

如果我发出POST请求,其中未在请求标头中设置content-type,则变量$_POST仍为空.

问题:如何强制PHP填充$_POST?

我遇到了使用XDomainRequest制作Javascript AJAX请求的问题,您无法定义任何标头.只是为了让您更容易理解这个问题,您可以通过这种方式在PHP中使用Javascript来模拟相同的效果

$data = 'test=1';

$fp = fsockopen('www.yourpage.org', 80, $errno, $errstr, 5);
fputs($fp, "POST /test_out.PHP HTTP/1.1\r\n");
fputs($fp, "Host: www.yourpage.org\r\n");
//fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ". strlen($data) ."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $data);

while(!feof($fp)) { echo fgets($fp, 128); }
fclose($fp);

test_out.PHP会的

var_dump($_POST);

没有正确的内容类型,$_POST中的变量会神奇地消失.

这更像是一个教育问题.我问这个是因为这里的大多数人无法想象内容类型有这种效果.我被要求’回来说实话’.所以,你走了.

解决方法:

如果必须,可以使用Apache mod_headers覆盖/注入必要的头.或者以其他方式手动重建$_POST数组. (另见userland multipart/form-data handler)

如果它总是urlencoded,只需从PHP:// input(包含原始POST请求体)中读取并使用parse_str:

parse_str(file_get_contents("PHP://input"), $_POST);

这应该重新创建POST数组,就像PHP一样.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐