PHP中流的基本知識
這篇文章主要介紹PHP中流的基本知識,有興趣的朋友參考下,希望對大家有幫助。
概述
流(streams)是PHP4.3版本引入的特性,主要是為了統一檔案、sockets以及其他類似資源的工作方法。 PHP4.3距今已經很久了,但很多程式設計師似乎都無法正確使用PHP中的流,當然這也包括我。以前也在一些程式中遇到過流的使用,如php://input,但一直沒機會整理,今天就把這部分知識整理下來。
串流是由PHP提供的資源,可以供我們透明的使用,而且串流是一個非常強大的工具。適當的在程式中使用流,可以將我們的程式帶到一個新的高度。
每一種流都實作了一個包裝器(wrapper),包裝器包含一些額外的程式碼用來處理特殊的協定和編碼。 PHP提供了一些內建的包裝器,我們也可以輕鬆的建立和註冊自訂的包裝器。我們甚至可以使用上下文(contexts)和過濾器來改變和增強包裝器。
流基礎
PHP中流的形式如:
預設的包裝器是file://,也就是說每次我們訪問檔案系統的時候都使用了流。例如,我們可以使用以下兩種方式來讀取檔案:readfile('/path/to/somefile.txt')和readfile('file:///path/to/somefile.txt'),使用這兩種方式讀取文件,可以得到相同的結果。
如前面所說,PHP提供了一些內建的包裝器、協定和過濾器。查看我們的機器上安裝了哪些包裝器,可以使用以下幾個函數:
程式碼如下:
<?php var_dump(stream_get_transports()); var_dump(stream_get_wrappers()); var_dump(stream_get_filters()); ?>
我本地的環境輸出內容如下:
#程式碼如下:
array (size=8) 0 => string 'tcp' (length=3) 1 => string 'udp' (length=3) 2 => string 'unix' (length=4) 3 => string 'udg' (length=3) 4 => string 'ssl' (length=3) 5 => string 'sslv3' (length=5) 6 => string 'sslv2' (length=5) 7 => string 'tls' (length=3) array (size=12) 0 => string 'https' (length=5) 1 => string 'ftps' (length=4) 2 => string 'compress.zlib' (length=13) 3 => string 'compress.bzip2' (length=14) 4 => string 'php' (length=3) 5 => string 'file' (length=4) 6 => string 'glob' (length=4) 7 => string 'data' (length=4) 8 => string 'http' (length=4) 9 => string 'ftp' (length=3) 10 => string 'phar' (length=4) 11 => string 'zip' (length=3) array (size=12) 0 => string 'zlib.*' (length=6) 1 => string 'bzip2.*' (length=7) 2 => string 'convert.iconv.*' (length=15) 3 => string 'string.rot13' (length=12) 4 => string 'string.toupper' (length=14) 5 => string 'string.tolower' (length=14) 6 => string 'string.strip_tags' (length=17) 7 => string 'convert.*' (length=9) 8 => string 'consumed' (length=8) 9 => string 'dechunk' (length=7) 10 => string 'mcrypt.*' (length=8) 11 => string 'mdecrypt.*' (length=10)
另外,我們可以自訂或使用第三方的流。
php://包裝器
PHP有它自己的存取輸入/輸出(I/O)流的包裝器。 PHP有基本的php://stdin,php://stdout,php://stderr包裝器對應預設的I/O資源。還有一個php://input流,它是一個唯讀的流,流內容是post請求的資料。當我們將資料放在一個post請求的body體內用來請求一個遠端服務的時候,這個流特別好用。
因為php://input是最常用來使用的串流,所以這裡列出一些知識點:
#1.php://input可以讀取沒有處理過的POST資料。相較於$HTTP_RAW_POST_DATA而言,它給記憶體帶來的壓力較小,且不需要特殊的php.ini設定。 php://input不能用於enctype=multipart/form-data
2.只有當Content-Type為application/x-www-form-urlencoded且提交方法是POST方法時,$_POST資料與php:/ /input資料才是」一致」(打上引號,表示它們格式不一致,內容一致)的。其它情況,它們都不一致
3.php://input讀取不到GET資料。是因為_GET資料作為query_path寫在http請求頭部(header)的PATH字段,而不是寫在http請求的body部分。
串流上下文(Stream Contexts)
這部分內容在程式設計中幾乎沒有遇到過,本人研究起來也比較吃力,大家感興趣的話可以自行百度。
總結
流在平時的程式設計中用到的並不是很多,在使用xml-rpc的時候,server端取得client數據,主要是透過php輸入流input,這是常用的場景。駭客在入侵網站的時候,也可能會用到這部分內容。
相關推薦:
以上是PHP中流的基本知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。
