PHP獲取HTTP body內容

2021-08-19 22:59:15 字數 2307 閱讀 8433

有時候我們獲取資料時需要根據header中的格式來解析,比如上傳乙個json而不是乙個文字。這裡用到了php輸入|輸出流的概念。

php 提供了一些雜項輸入/輸出(io)流,允許訪問 php 的輸入輸出流、標準輸入輸出和錯誤描述符, 記憶體中、磁碟備份的臨時檔案流以及可以操作其他讀取寫入檔案資源的過濾器。

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'])

// client_web.php, 注意這裡使用了 axios

// ...

service = axios.create(

});// 發乙個請求

service.post(url, '

// ...

});// 全域性設定也沒問題

service.interceptors.request.use(function

(config), function

(err){});

以下為官方文件小抄

php 輸入|輸出流分為:php://stdin,php://stdoutphp://stderr

php://stdinphp://stdoutphp://stderr允許直接訪問 php 程序相應的輸入或者輸出流。 資料流引用了複製的檔案描述符,所以如果你開啟php://stdin並在之後關了它, 僅是關閉了複製品,真正被引用的 stdin 並不受影響。 注意 php 在這方面的行為有很多 bug 直到 php 5.2.1。 推薦你簡單使用常量 stdin、 stdout 和 stderr 來代替手工開啟這些封裝器。

其中php://stdin是唯讀的,php://stdoutphp://stderr是只寫的。

php://output

php://output是乙個只寫的資料流, 允許你以 print 和 echo 一樣的方式 寫入到輸出緩衝區。

php://fd

php://fd允許直接訪問指定的檔案描述符。 例如 php://fd/3 引用了檔案描述符 3。

php://memory 和 php://temp

php://memoryphp://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 獲取網頁內容

方法1 用file get contents 以get方式獲取內容 url html file get contents url echo html 方法2 用file get contents函式,以post方式獲取url 如果需要再傳遞cookie資料,則把 content length str...

php獲取網頁內容方法

1.file get contents url contents file get contents url 如果出現中文亂碼使用下面 getcontent iconv gb2312 utf 8 contents echo contents 2.curl url ch curl init timeo...

php獲取json裡面內容

a html mailno 1201519497579 exptextname 韻達快遞 expspellname yunda update 1420006818 cache 0 ord asc tel 021 39207888 b json decode a status b status mes...