对于一个经验丰富的
(一)表单POST方式提交情况下PHP获取POST数据
$_POST 与 php://input可以取到值,$HTTP_RAW_POST_DATA 为空
$_POST 以关联数组方式组织提交的数据,并对此进行编码处理,如urldecode,甚至编码转换。
php://input 可通过输入流以文件读取方式取得未经处理的POST原始数据
(二)fsockopen提交POST数据下PHP获取POST数据
- $sock = fsockopen("localhost", 80,
$errno, $errstr, 30); - if (!$sock) die("$errstr ($errno)n");
-
$data = "txt=" . urlencode("中") .
"&bar=" . urlencode("Value for Bar");
- fwrite($sock, "POST /posttest/response
.php HTTP/1.0rn"); - fwrite($sock, "Host: localhostrn");
- fwrite($sock, "Content-type: applicat
ion/x-www-form-urlencodedrn"); - fwrite($sock, "Content-length: " .
strlen($data) . "rn"); - fwrite($sock, "Accept: */*rn");
- fwrite($sock, "rn");
- fwrite($sock, "$datarn");
- fwrite($sock, "rn");
-
$headers = "";
-
while ($str = trim(fgets($sock,
4096)))
-
$headers .= "$strn";
- echo "n";
-
$body = "";
- while (!feof($sock))
-
$body .= fgets($sock, 4096);
- fclose($sock);
- echo $body;
PHP获取POST数据结论:
1. 用php://input可以很便捷的取到原始POST数据
2. $HTTP_RAW_POST_DATA 仅在POST的Content-Type类型不为PHP识别时才有效
如通常通过页面表单提交后的POST数据,不能通过$HTTP_RAW_POST_DATA提取到。因其编码类型属性(enctype属性)为 application/x-www-form-urlencoded、multipart/form-data。
注:即使在页面内显性地改变enctype属性为PHP不可识别的类型,仍无效。因表单提交编码属性是表单限定,不可识别的类型将被认为按默认编码方式提交(即application/x-www-form-urlencoded)
3. $_POST仅当数据按 application/x-www-form-urlencoded 类型提交时才能实现PHP获取POST数据。
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn