Blog

PHP流和封装器的应用

PHP 5 支持流的封装器,流封装器是封装流的代码实现,根据协议来管理流。 PHP默认支持几种流封装器,可以在这些经常使用的协议上透明地绑定流,类似于下面的代码: wrapper: //data name 一个封装的标准如file:// ,它简化了对需要频繁使用的本地文件的访问。 封装器适用于以下两种情况:当数据从一个数据源取得,或要向一个数据源写入时(如文件存取);另一种是使用新的访问方法(如HTTP 或FTP)存取数据。PHP5 都提供了标准化的访问方式。 PHP5 已经提供了一些预置的流包装器,这可以应付大多数的应用,我们可以通过phpinfo() 函数找到这些流包装器,例如:
  • 已注册的PHP 流包装器:php、file、http、ftp、compress.zlib、compress.bzip2
  • 已注册流的Socket传输方式:tcp、udp、unix、udg
  • 已注册的流过滤器:bzip2*,convert.iconv.*、string.rot13、string.toupper、string.tolower、string.strip_tags、convert.*、consumed、zlib.*
在PHP程序中应用封装器是很简单的,实际上我们只要能够处理file即可。下面介绍几个流封装器开发的使用例子。
  1. 从一个网站获取meta标签内容 下面的脚本读取网站的HTML数据,并确定内容的meta标签,然后显示出来,代码如下: 0){ foreach($tags as $name=>$content){ echo strtoupper($name); echo " = $content
    "; } } 该脚本运行后,会显示当前网页中的meta标识符以及关键字,如果页面上没有,则不会显示内容。如果该脚本运行时间略长,则可能有一段时间是用于连接的建立和传输,此外,也需要注意比如网络原因等都会导致脚本运行失败。
  2. 使用HTTP、FTP、电子邮件进行通讯 下面的脚本的功能是取得远程页面内容的网页,并转存到本地硬盘。 0){ $file = "data/$url.html"; $f = fopen($file,‘w’); fwrite($f,$page); fclose($f); echo "文件成功写入".filesize($file)."字节" } ?> 这里我们仅仅用了一个内置函数:file_get_content(),它负责检查页面的尺寸大小是否小于0,如果条件满足,则将取得的网页内容以$url的名称保存,并使用filesize()函数返回页面的字节数。
  3. 流数据压缩存储 我们还能对流数据进行压缩方式的保存。下面的例子进一步使用封装器compress.zlib,将流格式数据保存为压缩格式文件。 0){ $file = "data/$url.gz"; //加入压缩流过滤器 $f = fopen("compress.zlib://$file","w"); fwrite($f,$page); fclose($f); echo "文件成功写入".filesize($file)."字节"; } ?>
  4. 上例我们已经将取得文件流的数据,并压缩保存成一个文件,我们仍然用compress.zlib对文件进行解压缩,然后我们将内容以行号分行显示出来。 0){ //压缩后的文件名 $file = "data/$url.gz"; $f = fopen("compress.zlib://$file","w"); fwrite($f,$page); fclose($f); echo "网页文件已经被压缩为:".filesize($file)."字节"; echo "

    "; $farray = file("compress.zlib://$file"); //将内容以源代码形式和行号显示 foreach($farray as $num => $content){ printf('%o3d:%s
    ',$num,htmlspecialchars($content)); } } ?>
实际上,压缩和解压缩的过程对用户是透明的,我们使用包装器可以让用户灵活地实现流数据的操作,封装器常用在Socket应用中。

Over 95% of our clients recommend our language services to others


Copyright © CCJK Technologies Co., Ltd. 2000-2017. All rights reserved.
TOP