精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
關于PHP中的請求上下文的相關知識

關于PHP中的請求上下文的相關知識

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

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

首先,我們定義一個服務端,在這里只是輸出 \$_GET 和 $_POST 里面的內容。同時,我們還打印了 $_SERVER 來看看請求頭是否獲取到了。

print_r($_SERVER);

echo 'GET INFO', PHP_EOL;
foreach ($_GET as $k => $v) {
    echo $k, ': ', $v, PHP_EOL;
}

echo PHP_EOL,PHP_EOL;
echo 'POST INFO', PHP_EOL;
foreach ($_POST as $k => $v) {
    echo $k, ': ', $v, PHP_EOL;
}

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

$postdata = http_build_query(
    [
        'var1' => 'some content',
        'var2' => 'doh',
    ]
);

$opts = [
    'http' => [
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => $postdata,
    ],
];

$context = stream_context_create($opts);
$result = file_get_contents('http://localhost:8088/?a=1'false, $context);
print_r($result);
var_dump($http_response_header);

在這里,我們只是用到了 stream_context_create() ,就能夠輕松地創建一個請求的上下文環境了。stream_context_create() 是創建上下文環境的函數,它接收的參數是一個選項數組,里面用于定義當前請求的相關選項。注意,我們這里其實定義的是 http/https 相關的選項,它還可以定義 ftp 、 socket 等相關的請求協議選項。

在使用 file_get_contents() 函數請求遠程地址后,我們可以在 $http_response_header 變量內獲取到請求返回的響應頭信息。而且這個變量是會定義在當前的局部作用域下,不用擔心全局作用域污染的問題。

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

$url = "http://localhost:8088/?a=1";

$opts = [
    'http' => [
        'method' => 'GET',
        'max_redirects' => '0',
        'ignore_errors' => '1',
    ],
];

$context = stream_context_create($opts);
$stream = fopen($url, 'r'false, $context);

// 返回響應頭
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 類型的函數,也就是流函數。它們是專門用來處理各種數據的,包括但不限于文件中的、網絡上的、壓縮文件以及其他一些操作的數據。在將來的學習中,我們還會接觸到其它的內容。今天的學習,其實是流的網絡數據處理中的一小部分內容,大家先消化消化吧!

測試代碼:https://github.com/zhangyue0503/dev-blog/blob/master/php/202003/source/%E5%85%B3%E4%BA%8EPHP%E4%B8%AD%E7%9A%84%E8%AF%B7%E6%B1%82%E4%B8%8A%E4%B8%8B%E6%96%87%E7%9A%84%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86.php

參考文檔:https://www.php.net/manual/zh/context.php

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
超強功能file_put_contents()函數(集成了fopen、fwrite、fclose)
了解PHP中Stream(流)的概念與用法
八個無法利用XSS漏洞的場景
HTML5新特性之WebRTC
Javascript通過bind()掌控this
保持用戶上下文
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 涟水县| 汉中市| 高州市| 梁山县| 衡阳县| 安西县| 宣武区| 常州市| 湖北省| 桃园县| 休宁县| 临猗县| 聊城市| 盐津县| 海口市| 兰考县| 定日县| 中牟县| 永兴县| 东兴市| 远安县| 来宾市| 嵊州市| 米易县| 阳原县| 青州市| 叙永县| 遂溪县| 高要市| 宜都市| 莱芜市| 扬州市| 许昌县| 雅江县| 吴忠市| 离岛区| 喀喇沁旗| 德阳市| 英德市| 册亨县| 广西|