理解 PHP 中的 Streams

來源:互聯網
上載者:User

   Streams 是PHP提供的一個強有力的工具,我們常常在不經意會使用到它,如果善加利用將大大提高PHP的生產力。 駕馭Streams的強大力量後,應用程式將提升到一個新的高度。

  下面是PHP手冊中對Streams的一段描述:

  Streams 是在PHP 4.3.0版本被引入的,它被用於統一檔案、網路、資料壓縮等類檔案的操作方式,為這些類檔案操作提供了一組通用的函數介面。簡而言之,一個stream就是一個具有流式行為的資來源物件。也就是說,我們可以用線性方式來對stream進行讀取和寫入。並且可以用使用fseek()來跳轉到stream內的任意位置。

  每個Streams對象都有一個封裝類,在封裝中可以添加處理特殊協議和編碼的相關代碼。PHP中已經內建了一些常用的封裝類,我們也可以建立和註冊自訂的封裝類。我們甚至能夠使用現有的context和filter對封裝類進行修改和增強。

  Stream 基礎知識

  Stream 可以通過://方式來引用。其中是封裝類的名字,中的內容是由封裝類的文法指定,不同的封裝類的文法會有所不同。

  PHP預設的封裝類是file://,也就是說我們在訪問檔案系統的時候,其實就是在使用一個stream。我們可以通過下面兩種方式來讀取檔案中的內容,readfile('/path/to/somefile.txt')或者readfile('file:///path/to/somefile.txt'),這兩種方式是等效的。如果你是使用readfile('http://google.com/'),那麼PHP會選取HTTP stream封裝類來進行操作。

  正如上文所述,PHP提供了不少內建的包轉類,protocol以及filter。 按照下文所述的方式,可以查詢到本機所支援的封裝類:

  

  print_r(stream_get_transports());

  print_r(stream_get_wrappers());

  print_r(stream_get_filters());

  在我機器上的輸出結果為:

  Array

  (

  [0] => tcp

  [1] => udp

  [2] => unix

  [3] => udg

  [4] => ssl

  [5] => sslv3

  [6] => sslv2

  [7] => tls

  )

  Array

  (

  [0] => https

  [1] => ftps

  [2] => compress.zlib

  [3] => compress.bzip2

  [4] => php

  [5] => file

  [6] => glob

  [7] => data

  [8] => http

  [9] => ftp

  [10] => zip

  [11] => phar

  )

  Array

  (

  [0] => zlib.*

  [1] => bzip2.*

  [2] => convert.iconv.*

  [3] => string.rot13

  [4] => string.toupper

  [5] => string.tolower

  [6] => string.strip_tags

  [7] => convert.*

  [8] => consumed

  [9] => dechunk

  [10] => mcrypt.*

  [11] => mdecrypt.*

  )

  提供的功能非常多,看上去還不錯吧?

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。