理解 PHP 中的 Streams

   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.*

  )

  提供的功能非常多,看上去还不错吧?

时间: 2024-12-09 23:55:00

理解 PHP 中的 Streams的相关文章

深入理解PHP中的Streams工具_php技巧

Streams 是PHP提供的一个强有力的工具,我们常常在不经意会使用到它,如果善加利用将大大提高PHP的生产力. 驾驭Streams的强大力量后,应用程序将提升到一个新的高度. 下面是PHP手册中对Streams的一段描述:     Streams 是在PHP 4.3.0版本被引入的,它被用于统一文件.网络.数据压缩等类文件的操作方式,为这些类文件操作提供了一组通用的函数接口.简而言之,一个stream就是一个具有流式行为的资源对象.也就是说,我们可以用线性的方式来对stream进行读取和写入

AJAX入门之深入理解&#106avascript中的函数

ajax|函数 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.javascript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(-){-}var func2=function(-){-};var func3=function func4(-){-};var func5=new Funct

AJAX入门之深入理解JavaScript中的函数

ajax|javascript|函数 概述 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解.JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(-){-}var func2=function(-){-};var func3=function func4(-){-};var f

新手入门:理解JavaScript中函数的使用

javascript|函数 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. JavaScript中的函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的.通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递.在继续讲述之前,先看一下函数的使用语法: function func1(-){-} var func2=function(-){-}; var func3=function func4(-){-}; var func5

深入理解Javascript中的this关键字

 这篇文章主要介绍了深入理解Javascript中的this关键字,本文讲解了方法调用模式.函数调用模式.构造器调用模式.apply调用模式中this的不同之处,需要的朋友可以参考下     自从接触javascript以来,对this参数的理解一直是模棱两可.虽有过深入去理解,但却也总感觉是那种浮于表面,没有完全理清头绪. 但对于this参数,确实会让人产生很多误解.那么this参数到底是何方神圣? 理解this this是一个与执行上下文(execution context,也就是作用域)相

深入理解JavaScript中的对象

  这篇文章主要介绍了深入理解JavaScript中的对象,是JS入门学习中的基础知识,需要的朋友可以参考下 JavaScript是一种面向对象编程(OOP)语言.一种编程语言可以被称为面向对象的,它为开发者提供了四种基本功能: 封装 - 存储相关的信息,无论是数据或方法,还是对象 聚合 - 存储一个对象到另一个对象的内部 继承 - 类的能力依赖于另一个类(或类数),用于其部分的属性和方法 多态性 - 编写函数或者方法,在各种不同的方式工作 对象是由属性.如果属性包含一个函数,它被认为是一个对象

换个角度理解PS中的布尔运算

  我最开始接触布尔运算是在使用3DSMAX的时候,三维物体的布尔运算. 那个时候理解起来更直接,后来使用PS的时候,发现这里也有个叫布尔运算的东西. 但接触了一下发现并不好理解,尤其是对没有接触过的人 今天,我就是结合我对3D.2D的布尔运算的理解和使用,以及数集交并差的逻辑关系,从另一个角度讲一下布尔运算 所以今天的话题是<换个角度理解PS中的布尔运算>,用犀利的眼光去理解UI绘制时PS中的布尔运算,看谁谁怀孕~ 当然,也会把布尔运算的理解和基础操作从0开始讲 我讲的时候习惯是从原理和理论

跨考计算机求教,不理解操作系统中的一些概念

问题描述 跨考计算机求教,不理解操作系统中的一些概念 不太理解操作系统中的一些概念,想知道这样理解对不对.当一个程序运行时,需要显示结果到显示屏上,为I/O操作,切换到内核态,由于IO操作,该进程进入阻塞状态,系统调度其他进程运行.还系统调用到底是什么? 解决方案 只说Windows下的,(个人理解),别的系统大同小异学过汇编的都知道有种东西叫中断,分为可屏蔽和不可屏蔽的两种.但是Windows的设计者对中断进行了扩充,提出了一个叫"中断请求级"的概念.其中规定了32个中断请求级,其中

如何理解java中的空实现

问题描述 如何理解java中的空实现 新建一个类实现某接口,然后这个类的构造方法重写接口的某个方法,这个方法没有方法体 也就是重写其抽象方法,那么这样是不是控实现呢 解决方案 没有空实现这个概念,只有抽象类中的抽象函数,和接口中的函数定义,它们只有函数定义. 有的时候,对于void类型的函数,我们只打上括号,没有任何代码,这通常被称为空实现,或者桩函数. 解决方案二: java 中的空指针,不为空,的理解CallBack 的理解和java实现对java 接口和实现的理解 解决方案三: java高