php獲取輸入流
uc中的用到的程式碼(在api/uc.php)程式碼:
$post = xml_unserialize(file_get_contents(`php://input`));
php手冊(http://cn.php.net/manual/zh/wrappers.php.php)說明:
php://input allows you to read raw data
from the request body.
In case of POST requests, it preferrable to
$HTTP_RAW_POST_DATA as it does not depend on
special php.ini directives. Moreover, for those cases where
$HTTP_RAW_POST_DATA is not populated by
default, it is a potentially less memory intensive alternative
to activating always_populate_raw_post_data.
php://input is not available with
enctype=”multipart/form-data”.
Note:
A stream opened with php://input can only be read
once; the stream does not support seek operations. However, depending
on the SAPI implementation, it may be possible to open another
php://input stream and restart reading. This is
only possible if the request body data has been saved. Typically, this
is the case for POST requests, but not other request methods, such as
PUT or PROPFIND.
理解
1.符號的理解:與符號”http://“對比。可以理解php://表示這是一種協議。不同的是它是php自己定義與使用的協議。
輸入域名的時候,htt://後面輸入的是域的名字。那麼php://後面的”input”也可以表示一個檔案。是一個php已經定義好的檔案。比如有ouput。php自己知道去哪裡找這個檔案。
2.相關聯知識: 常量$HTTP_RAW_POST_DATA是獲取post提交的原始資料(contains the raw POST data)。php://input 的所完成的功能與它一樣:都是包含post過來的原始資料。
使用php://input比$HTTP_RAW_POST_DATA更好。因為:使用php://inpu不受到配置檔案的影響。常量$HTTP_RAW_POST_DATA受到php.ini配置的影響。在php.ini中有個選項,always_populate_raw_post_data = On。該配置決定是否生成常量$HTTP_RAW_POST_DATA(儲存post資料)。
php://input的方式與$HTTP_RAW_POST_DATA資料都同樣不適用於表單提交的”multipart/form-data”型別的資料。所以,兩種的區別就是在於是否受到配置檔案的影響。另外,記憶體消耗更少,這個怎麼理解?
3.怎麼得到其內容:使用file_get_contents(`php://input`)得到輸入流的內容。php://input的結果只讀。
4.使用規則:必須是post方式提交的資料。而且提交的不能是multipart/form-data型別的資料(當需要上傳檔案,就會在form標籤中新增屬性enctype=”multipart/form-data”)
想更好地理解它是怎麼使用的。做個試驗就明白:
html檔案輸入內容:
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
<html xmlns=”http://www.w3.org/1999/xhtml”>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />
<title>無標題文件</title>
</head><body>
<form action=”input.php” method=”post”>
<input name=”username” type=”text” />
<input name=”password” type=”text” />
<input name=”name” type=”submit”value=”提交資料” />
</form></body>
</html>input.php:
<?php
$input = file_get_contents(`php://input`);
var_dump($input);exit;
?>提交後,得到結果:
string(97) “username=%E5%90%8D%E5%AD%97&password=%E5%AF%86%E7%A0%81&name=%E6%8F%90%E4%BA%A4%E6%95%B0%E6%8D%AE”
接下來改為get方式提交,結果為:
string(0) “”
說明沒有任何資料
相關文章
- flowable 獲取當前任務流程圖片的輸入流流程圖
- activiti 獲取當前任務流程圖片的輸入流流程圖
- 深入剖析PHP輸入流php://input(與POST/GET的區別)PHP
- 從標準輸入流中讀取資料
- JavaIO流(一)-位元組輸入流與字元輸入流JavaAI字元
- outputStream(輸出流)轉inputstream(輸入流)以及輸入流如何複用
- php 獲取IPPHP
- PHP 輸出快取PHP快取
- PHP獲取微信accesstokenPHP
- PHP獲取客戶端、PHP獲取伺服器相關資訊PHP客戶端伺服器
- php 獲取時間差PHP
- php動態獲取常量PHP
- PHP獲取隨機數PHP隨機
- PHP獲取表單方法PHP
- 從標準輸入流中讀取並執行shell指定函式函式
- Linux c程式中獲取shell指令碼輸出(如獲取system命令輸出)LinuxC程式指令碼
- PHP --反射 --獲取類的方法PHP反射
- PHP 獲取裝置型別PHP型別
- php怎麼獲取mac地址?PHPMac
- PHP PDO獲取結果集PHP
- php 之讀取鍵盤輸入PHP
- php一句話獲取獲取檔案目錄的方法PHP
- php獲取xml檔案內容PHPXML
- php-MediaInfo 獲取媒體資訊PHPAI
- php 獲取函式被呼叫位置PHP函式
- PHP 常用獲取路徑程式碼PHP
- 使用PHP獲取根域名的方法!PHP
- java SequenceInputStream類(序列輸入流)的用法示例Java
- 將輸入流InputStream轉換為String
- 獲取input框輸入值異常
- java獲取當前秒數輸出Java
- PHP 正則獲取域名(一級域名)PHP
- PHP如何獲取最大檔名長度PHP
- PHP獲取HTTP body內容的方法PHPHTTP
- PHP 獲取伺服器磁碟空間PHP伺服器
- PHP獲取ip與ip所在城市PHP
- PHP - 獲取和設定include_path .PHP
- Java中執行程式並獲取輸出Java行程