PHP獲取HTTP body內容的方法
今天小編就為大家分享一篇PHP獲取HTTP body內容的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧有時候我們獲取數據時需要根據Header中的格式來解析,比...
有時候我們獲取數據時需要根據Header中的格式來解析,比如上傳一個json而不是一個文本。這里用到了 php輸入|輸出流 的概念。
PHP 提供了一些雜項輸入/輸出(IO)流,允許訪問 PHP 的輸入輸出流、標準輸入輸出和錯誤描述符, 內存中、磁盤備份的臨時文件流以及可以操作其他讀取寫入文件資源的過濾器。
本文涉及到了了,php://input,詳盡內容請參閱官網:點擊查看官網
php://input 是個可以訪問請求的原始數據的只讀流。 POST 請求的情況下,最好使用 php://input 來代替 $HTTP_RAW_POST_DATA,因為它不依賴于特定的 php.ini 指令。 而且,這樣的情況下 $HTTP_RAW_POST_DATA 默認沒有填充, 比激活 always_populate_raw_post_data 潛在需要更少的內存。 enctype="multipart/form-data" 的時候 php://input 是無效的。
模擬代碼
// server.php
switch
(
$_SERVER
[
'CONTENT_TYPE'
]){
case
'application/json'
:
// 這里通過輸入端來獲取數據
$body
=
file_get_contents
(
'php://input'
);
echo
'這是一個json:'
,
$body
;
break
;
// ...
}
// client_web.php, 注意這里使用了 axiOS
// ...
service = axios.create({
baseURL:
'mydomain'
,
validateStatus:
function
(status){
if
(500 >= status) alert(
'server fails'
);
}
});
// 發一個請求
service.post(url, {
// ...
headers: {
'Content-Type'
:
'application/json'
},
data:
'{"code":100}'
// ...
});
// 全局設置也沒問題
service.interceptors.request.
use
(
function
(config){
// 這里設置請求頭
config.headers[
'Content-Type'
] =
'application/json'
;
return
config;
},
function
(err){});
引申閱讀
以下為官方文檔小抄
PHP 輸入|輸出流分為: php://stdin, php://stdout 和 php://stderr
php://stdin、php://stdout 和 php://stderr 允許直接訪問 PHP 進程相應的輸入或者輸出流。 數據流引用了復制的文件描述符,所以如果你打開 php://stdin 并在之后關了它, 僅是關閉了復制品,真正被引用的 STDIN 并不受影響。 注意 PHP 在這方面的行為有很多 BUG 直到 PHP 5.2.1。 推薦你簡單使用常量 STDIN、 STDOUT 和 STDERR 來代替手工打開這些封裝器。
其中 php://stdin 是只讀的, php://stdout 和 php://stderr 是只寫的。
php://output
php://output 是一個只寫的數據流, 允許你以 print 和 echo 一樣的方式 寫入到輸出緩沖區。
php://fd
php://fd 允許直接訪問指定的文件描述符。 例如 php://fd/3 引用了文件描述符 3。
php://memory 和 php://temp
php://memory 和 php://temp 是一個類似文件 包裝器的數據流,允許讀寫臨時數據。 兩者的唯一區別是 php://memory 總是把數據儲存在內存中, 而 php://temp 會在內存量達到預定義的限制后(默認是 2MB)存入臨時文件中。 臨時文件位置的決定和 sys_get_temp_dir() 的方式一致。
php://temp 的內存限制可通過添加 /maxmemory:NN 來控制,NN 是以字節為單位、保留在內存的最大數據量,超過則使用臨時文件。
php://filter
php://filter 是一種元封裝器, 設計用于數據流打開時的篩選過濾應用。 這對于一體式(all-in-one)的文件函數非常有用,類似 readfile()、 file() 和 file_get_contents(), 在數據流內容讀取之前沒有機會應用其他過濾器。
php://filter 目標使用以下的參數作為它路徑的一部分。 復合過濾鏈能夠在一個路徑上指定。詳細使用這些參數可以參考具體范例。
以上這篇PHP獲取HTTP body內容的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,
PHP面向對象程序設計中獲取對象屬性的3種方法實例分析
文章主要介紹了PHP獲取對象屬性的三種方法,結合實例形式分析了php面向對象程序設計中獲取對象屬性的常見操作技巧,需要的朋友可以參考下。PHP獲取對象屬性的三種方法,具體如下...
php5.5新增的yield關鍵字功能與相關使用技巧
文章主要介紹了PHP yield關鍵字功能與用法,結合實例形式分析了php5.5新增的yield關鍵字功能與相關使用技巧,需要的朋友可以參考下實例講述PHP yield關鍵字功能與用法具體如下:y...
Windows7下IIS+php配置教程詳細介紹
文章主要為大家詳細介紹了Windows7下IIS+php配置教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下...
PHP序列化的四種實現方法與橫向對比教程
在PHP中,序列化用于存儲或傳遞 PHP 的值的過程中,同時不丟失其類型和結構。本文講述PHP序列化的四種方案,感興趣的可以了解一下一、PHP 序列化變量的 4 種方法序列化是將變量轉...
PHP基于Redis消息隊列實現的消息推送的方法
文章主要介紹了php基于Redis消息隊列實現的消息推送的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧基本知識點重點用到了以下命令實現我們...
Linux服務器下 php7安裝redis的方法
文章主要介紹了Linux下 php7安裝redis的方法,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下安裝redis服務1 下載redis cd /usr/local/ 進入安裝目錄 wget http://dow...
PHP判斷電子郵件是否正確的簡單方法介紹
本篇內容里小編給大家整理了一篇關于php判斷電子郵件是否正確方法,需要的朋友們參考下。PHP判斷電子郵件是否正確即是否有效,是我們PHP面試過程中常見考題之一。我們可以使用P...
在PHP中進行curl開啟操作的具體教程
相信大家對于PHP都并不陌生了,畢竟PHP吸收了C語言、Java里的許多優點,作為一款腳本語言還是收到很多程序員朋友的喜愛的。PHP里的curl函數庫還是非常實用的,今天小編就給大...
PHP中間件ICE,ICE的安裝配置,ICE常見編譯和運行(異常)錯誤
ICE(Internet Communications Engine)是Zeroc提供的一款高性能的中間件。使用ICE能使得php(或c++,java,python)與java,c++,.net,python等進行交互。基于ICE可以實現電信級的...
win7下手動配置apache+php+mysql記
本來想學學php,于是就想搭建web服務器和sql環境,結果浪費掉了不少時間。大致的總結下,也算是長個記性。使用的安裝包分別是httpd-2.2.22-win32-x86-no_ssl.msi,php-5.2.5-Win32.zip和mysql-installer-communit...