現如今,網際網路已經大大地豐富了我們的生活,現在的人越來越離不開網際網路了。網際網路開發也稱為現在的熱門職業。但是,在人人都離不開網際網路的時代,你知道網際網路是如何通過代碼獲取web伺服器上的數據嗎?
下面,就來聊聊網際網路獲取數據的常用方法——get和post方法。這兩種方法都可以獲取web伺服器上的數據。不過,他們既有相同點,也有不同點。下面我們一起來看看這兩種方法的詳細情況吧。
$_GET方法
預定義的 $_GET 變量用於收集來自 method="get" 的表單中的值。從帶有 GET 方法的表單發送的信息,對任何人都是可見的(會顯示在瀏覽器的地址欄),並且對發送信息的量也有限制。例如我要get一個ID的值,在網頁上將會這樣顯示(這裡要將ID=2的這個消息的取消點讚):
在GET請求中,其本意是從伺服器中下載相應的數據,數據是後綴在URL後面來發送的,就如下圖那樣(使用postman測試get方式的數據請求),PHP將GET請求封裝在了$_GET數組中,請求的變量名是數組的下標,要接收上面那個請求傳遞的兩個變量msg_id使用$_GET['msg_id']即可。請看下面的例子:
示例代碼如下:
public function actionlist(){$user = \Yii::$app->user->identity;$msg_id = \Yii::$app->request->get('msg_id');$fields = ['id','user_id', 'is_delete', 'created_at','content', 'msg_id', 'parent_id','deleted_at'];$query = FriendComment::find()->select($fields)->where(['msg_id' => $msg_id, 'is_delete' => 0])->asArray()->all();$count = $query->count();$pagination = new Pagination(['totalCount' => $count]);$query->orderBy('created_at desc');$list = $query->offset($pagination->offset)->limit($pagination->limit)->asArray()->all();$result = array();$result["count"] = $count;$result["list"] = $list;return $result;}
上述php代碼是一個簡單的從web伺服器的資料庫中下載數據的例子,其功能是從對應的表單中找到某個朋友圈消息的評論,並將數據結果統計後一數組的形式顯示出來,在顯示過程中可以分頁顯示
當然,有時候,在程序中並不能確定客戶端提交了哪些數據過來,那麼怎麼樣在不知道請求變量名字的前提下遍歷請求數據呢?這種屏蔽細節,遍歷集合的方法在《設計模式》中被稱為迭代(Iterate), PHP中是通過foreach語句來實現的。例如:
<!-- iterator.php -->
<?php
foreach($_GET as $index => $value) echo "$_GET[$index] = $value", "<BR>";
?>
我們在使用對應的url網頁訪問的時候,就會看到foreach語句將所有用GET方法請求的變量都枚舉出來了,而在事先,我們並不知道每個請求變量的名字。
$_POST方法
預定義的 $_POST 變量用於收集來自 method="post" 的表單中的值。從帶有 POST 方法的表單發送的信息,對任何人都是不可見的(不會顯示在瀏覽器的地址欄),並且對發送信息的量也沒有限制。
注意:默認情況下,POST 方法的發送信息的量最大值為 8 MB(可通過設置 php.ini 文件中的 post_max_size 進行更改)。
POST方法的主要用途就是「傳遞」數據,最直白的意思就是將數據傳送到web伺服器了。它將數據放在所有請求標題的後面上傳,這樣一來,無論有多少數據上傳都不成問題了(這樣請求數據的大小之取決於WEB服務允許的尺寸了)。
通常來說,對於表單數據如無特別需要都使用POST方法來上傳,這樣就無須去關心具體上傳數據的尺寸了。POST方法的請求數據被封裝到了$_POST數組中,其使用方法與$_GET數組一樣。將上面的表單添加一個method屬性,