A. php 怎麼POST獲取數據
方法1、最常見的方法是:$_POST['fieldname'];
說明:只能接收Content-Type: application/x-www-form-urlencoded提交的數據
解釋:也就是表單POST過來的數據
方法2、file_get_contents("php://input");
說明:
允許讀取 POST 的原始數據。
和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 php.ini 設置。
php://input 不能用於 enctype="multipart/form-data"。
解釋:
對於未指定 Content-Type 的POST數據,則可以使用file_get_contents(「php://input」);來獲取原始數據。
事實上,用PHP接收POST的任何數據都可以使用本方法。而不用考慮Content-Type,包括二進制文件流也可以。
所以用方法二是最保險的方法
方法3、$GLOBALS['HTTP_RAW_POST_DATA'];
說明:
總是產生 $HTTP_RAW_POST_DATA 變數包含有原始的 POST 數據。
此變數僅在碰到未識別 MIME 類型的數據時產生。
$HTTP_RAW_POST_DATA 對於 enctype="multipart/form-data" 表單數據不可用
如果post過來的數據不是PHP能夠識別的,可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,
比如 text/xml 或者 soap 等等
解釋:
$GLOBALS['HTTP_RAW_POST_DATA']存放的是POST過來的原始數據。
$_POST或$_REQUEST存放的是 PHP以key=>value的形式格式化以後的數據。
但$GLOBALS['HTTP_RAW_POST_DATA']中是否保存POST過來的數據取決於centent-Type的設置,即POST數據時 必須顯式示指明Content-Type: application/x-www-form-urlencoded,POST的數據才會存放到 $GLOBALS['HTTP_RAW_POST_DATA']中
B. PHP怎麼獲取表單提交的數據啊
一、用file_get_contents以get方式獲取內容,需要輸入內容為:
1、<?php
2、$url='http://www.domain.com/?para=123';
3、$html = file_get_contents($url);
4、echo $html;
5、?>
二、用file_get_contents函數,以post方式獲取url,需要輸入內容為
1、<?php
2、$url = 'http://www.domain.com/test.php?id=123';
3、$data = array ('foo' => 'bar');
4、$data = http_build_query($data);
5、$opts = array (
6、'http' => array (
7、 'method' => 'POST',
8、 'header'=> "Content-type: application/x-www-form-urlencoded " .
9、 "Content-Length: " . strlen($data) . " ",
10、 'content' => $data
11、)
12、);
13、$ctx = stream_context_create($opts);
14、$html = @file_get_contents($url,'',$ctx);
15、?>
三、用fopen打開url,以get方式獲取內容,需要輸入內容為
1、<?php
2、$fp = fopen($url, 'r');
3、$header = stream_get_meta_data($fp);//獲取信息
4、while(!feof($fp)) {
5、$result .= fgets($fp, 1024);
6、}
7、echo "url header: {$header} <br>":
8、echo "url body: $result";
9、fclose($fp);
10、?>
四、用fopen打開url,以post方式獲取內容,需要輸入內容為
1、<?php
2、$data = array ('foo2' => 'bar2','foo3'=>'bar3');
3、$data = http_build_query($data);
4、$opts = array (
5、'http' => array (
6、'method' => 'POST',
7、'header'=> "Content-type: application/x-www-form-urlencoded Cookie:cook1=c3;cook2=c4 " .
8、"Content-Length: " . strlen($data) . " ",
9、'content' => $data
10、)
11、);
12、$context = stream_context_create($opts);
13、$html = fopen('http://www.test.com/zzzz.php?id=i3&id2=i4','rb' ,false, $context);
14、$w=fread($html,1024);
15、echo $w;
16、?>
五、用fsockopen函數打開url,以get方式獲取完整的數據,包括header和body,需要輸入內容為
1、?php
2、function get_url ($url,$cookie=false)
3、{
4、$url = parse_url($url);
5、$query = $url[path]."?".$url[query];
6、echo "Query:".$query;
7、$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30);
8、if (!$fp) {
9、return false;
10、} else {
11、$request = "GET $query HTTP/1.1 ";
12、$request .= "Host: $url[host] ";
13、$request .= "Connection: Close ";
14、if($cookie) $request.="Cookie: $cookie ";
15、$request.=" ";
16、fwrite($fp,$request);
17、while(!@feof($fp)) {
18、$result .= @fgets($fp, 1024);
19、}
20、fclose($fp);
21、return $result;
22、}
23、}
24、//獲取url的html部分,去掉header
25、function GetUrlHTML($url,$cookie=false)
26、{
27、$rowdata = get_url($url,$cookie);
28、if($rowdata)
29、{
30、$body= stristr($rowdata," ");
31、$body=substr($body,4,strlen($body));
32、return $body;
33、}
34、 return false;
35、}
36、?>