PHP 請求上下文相關總結

2022-09-25 17:36:10 字數 2364 閱讀 1498

我們首先來了解下什麼是上下文。在我們寫文章,寫句子時,都會考慮乙個觀點或者內容的前後邏輯,轉承啟合,而在這個觀點前後的內容就可以看成是它的上下文內容。它包含了語境的意味在裡面,其實**世界中的上下文也是一樣的意思,本身 context 這個單詞就是環境、背景的意思。

接下來,我們來說說請求上下文又是什麼呢?比如說我們要使用php來請求乙個鏈結位址,通常我們會使用 curl 來進行請求,但是 curl 的配置其實是比較複雜的,所以我們在簡單使用的情況下會使用 file_get_contents() 這種函式來快捷地請求鏈結。不過,可能pfogjdrb很多人並不知道或者說沒怎麼使用過它的上下文引數。pfogjdrb其實,使用了上下文引數之後,file_get_contents() 不僅可以提交 post 請求,還可以定義各種請求頭內容。這些東西,就是乙個請求的上下文,也就是它的執行環境和背景。

首先,我們定義乙個服務端,在這裡只是輸出 \_g程式設計客棧et 和 和_post 裡面的內容。同時,我們還列印了 $_server 來看看請求頭是否獲取到了。

print_r($_server);

echo 'get info', php_eol;

foreach ($_get as $k => $v)

echo php_eol,php_eol;

echo 'post info', php_eol;

foreach ($_post as $k => $v)

接下來,在我們的測試**中,使用 file_get_contents() 來進行 post 提交。

在這裡,我們只是用到了 stream_context_create() ,就能夠輕鬆地建立乙個請求的上下文環境了。stream_context_create() 是建立上下文環境的函式,它接收的引數是乙個選項陣列,裡面用於定義當前請求的相關選項。注意,我們這裡其實定義的是 http/https 相關的選項,它還可以定義 ftp 、 socket 等相關的請求協議選項。

在使用 file_get_contents() 函式請求遠端位址後,我們可以在 $http_response_header 變數內獲取到請求返回的響應頭資訊。而且這個變數是會定義在當前的區域性作用域下,不用擔心全域性作用域汙染的問題。

非常簡單的方式就可以實現 post 請求了吧,另外我們還可以使用 fopen() 函式來實現類似的效果,不過獲取 body 和響應應資訊時的方式就不同了。

$url = "http://localhost:808程式設計客棧8/?a=1";

// 返回響應頭

var_dump(stream_get_meta_data($stream));

// 返回內容

var_dump(stream_get_contents($stream));

fclose($stream);

在這段**中,我們使用 stream_get_meta_data() 函式來獲得響應頭,使用 stream_get_contents() 來獲得響應的內容(body)。這樣其實就真的和 curl 的效果差不多了,而且最主要的是,當前這種寫法更簡單方便。

從上面的**中我們可以看出,這種上下文相關的函式都是 stream 型別的函式,也就是流函式。它們是專門用來處理各種資料的,包括但不限於檔案中的、網路上的、壓縮檔案以及其他一些操作的資料。在將來的學習中,我們還會接觸到其它的內容。今天的學習,其實是流的網路資料處理中的一小部分內容,大家先消化消化吧!

測試**: github.com/zhangyue050…

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

flask請求鉤子 請求上下文

from flask import flask from flask import redirect,url for,abort 在第一次請求之前呼叫,可以在當前的方法中初始化操作 def before first request print before first request 在每一次請求之...

HttpContext請求上下文物件

httpcontext的生命週期從伺服器接收的http請求開始到反應傳送回客戶端結束。在webform或類庫 包括mvc 專案中,通過current靜態屬性,就能夠獲得httpcontext的物件。httpcontext context httpcontext.current 如果是在asp.net...