【小(xiǎo)編推薦】太原php開(kāi)發---PHP輸入流 p¶≠÷βhp://input

2015-09-12  &nb→•'∑sp;|   發布者:梁國(guó)↕≤芳   |  &nbs✔ α≥p;查看(kàn):3320次

php

PHP輸入流php://input

對(duì)于php://input介紹,PHP官方手冊文(wén)檔有(yǒ∑‌u)一(yī)段話(huà)對(duì)它進行(xíng)了(‍ ≠&le)很(hěn)明(míng)确地(dì)概¶∑述:

“php://input allows yo✘φδ✔u to read raw POST data. It is✔   a less memory intensive alternative t✘©o $HTTP_RAW_POST_DATA and d ₹γ☆oes not need any special php.ini d" λirectives. php://input is ©≥not available with encty ♥πpe=”multipart/form-data&rdquo₹≠ ;.

翻譯過來(lái),是(shì)這(zhè)樣:

“php://input可(kě)以讀(dú)取沒有(y€>ǒu)處理(lǐ)過的(de)POST數₩→ (shù)據。相(xiàng)較于$HTTφ♥β₽P_RAW_POST_DATA而言,它給內(nèi)存帶來(lái)的(♣∑$de)壓力較小(xiǎo),并且不(bù)需要(y>←↕ào)特殊的(de)php.ini設置。php:/$δ/input不(bù)能(néng)用(yòng)于enct• ♣&ype=multipart/form-data&rdquo¶ε♠λ;

我們應該怎麽去(qù)理(lǐ)解這(zhè)段概述Ω₩呢(ne)?我把它劃分(fēn)為(wè¥πi)三部分(fēn),逐步去(qù)理(lǐ)解:

  1. 讀(dú)取POST數(shù)據
  2. 不(bù)能(néng)用(yòng)于multipart/fo↕£rm-data類型
  3. php://input VS $HTTP_RAW_POST_DATAβ‍©

讀(dú)取POST數(shù)據

PHPer們一(yī)定很(hěn)熟悉$_POST這(zhè)個←→(gè)內(nèi)置變量。$_POST♣®÷ 與php://input存在哪些(xiē)關聯與區(qū)别呢(π>✘ne)?另外(wài),客戶端向服務端交互數(shù)據,最常用(yò‌♦ng)的(de)方法除了(le)POST之外(wài),還(hái)有(yǒuπ ∞")GET。既然php://input作(zuò)為×&π(wèi)PHP輸入流,它能(néng)讀α←→Ω(dú)取GET數(shù)據嗎(ma)?這(zh♦₩₩↕è)二個(gè)問(wèn)題正是(shì)我們這<↑(zhè)節需要(yào)探討(tǎo)的(de)主要(yào)內(nèi™♥)容。

  1. Content-Type取值為(wèi)applicat™☆ion/x-www-form-urlencoded時(shí),php會("∞huì)将http請(qǐng)求body相(xiàng)應數(sh≈®ù)據會(huì)填入到(dào)數(shù)組$_POST,填入♠φ到(dào)$_POST數(shù)組中的(de<≈≤)數(shù)據是(shì)進行(xíng)url∞ ≈decode()解析的(de)結果。(其實,除了(le)該Content-T±₩€ype,還(hái)有(yǒu)multipart/γ→form-data表示數(shù)據是(shì)表單數↔γλ(shù)據,稍後我們介紹)
  2. php://input數(shù)據,隻要(yà¥★o)Content-Type不(bù)為(wèi)multip 'πart/form-data(該條件(jiàn)限制(zhì)稍後會©÷∑™(huì)介紹)。那(nà)麽php://input數(shù)據↔₹¶與http entity body部分(fēn)數(shù)€β據是(shì)一(yī)緻的(de)。該部分(☆≤fēn)相(xiàng)一(yī)緻的(de)數(shù)據的≥↔(de)長(cháng)度由Content-Le‍<ngth指定。
  3. 僅當Content-Type為(wèi)application/x✔α×-www-form-urlencoded且提交方法是(shì)P₽ ∑¶OST方法時(shí),$_POST數(shù)據與php&&£→://input數(shù)據才是(shì)”一(yī♠→)緻”(打上(shàng)引号,表示它們格式不(bù)一α↕≤(yī)緻,內(nèi)容一(yī)緻)的(de)。其它情況 Ω,它們都(dōu)不(bù)一(yī)緻。
  4. php://input讀(dú)取不(bù)到(d₽☆ào)$_GET數(shù)據。是(sh×'≈ì)因為(wèi)$_GET數(shù)據作(zuò)為(wè♣≈i)query_path寫在http請(qǐng)求頭部(headerφ​)的(de)PATH字段,而不(bù)是(shì)寫在htt→↓p請(qǐng)求的(de)body部分(fē↑☆n)。

這(zhè)也(yě)幫助我們理(lǐ)解了(♠©le),為(wèi)什(shén)麽xml_rpc服務端讀(dú₹₽)取數(shù)據都(dōu)是(shì)通(tōng)過file_get‌'♦_contents(‘php://input’, ∏→‘r’)。而不(bù)是(shε>ì)從(cóng)$_POST中讀(dú)取,正是(shì)因為(wèi)xm↔‍←l_rpc數(shù)據規格是(shì)xml,它的(de)Content-≤™Type是(shì)text/xml。

php://input碰到(dào)了(le)multipart/fo✔¥±§rm-data

上(shàng)傳文(wén)件(jiàn)的(de)時(shí)候,表單的(∑'de)寫法是(shì)這(zhè)樣的(de):

1 <form enctype="multipart/form-da××"ta" action="phpinput_server. £php"method="POST" >
2     <input type="text"