应用封装php,PHP流和封装器的应用

PHP 5 支持流的封装器,流封装器是封装流的代码实现,根据协议来管理流。

PHP默认支持几种流封装器,可以在这些经常使用的协议上透明地绑定流,类似于下面的代码:

wrapper: //data name

一个封装的标准如file:// ,它简化了对需要频繁使用的本地文件的访问。

封装器适用于以下两种情况:当数据从一个数据源取得,或要向一个数据源写入时(如文件存取);另一种是使用新的访问方法(如HTTP 或FTP)存取数据。PHP5 都提供了标准化的访问方式。

PHP5 已经提供了一些预置的流包装器,这可以应付大多数的应用,我们可以通过phpinfo() 函数找到这些流包装器,例如:

1. 已注册的PHP 流包装器:php、file、http、ftp、compress.zlib、compress.bzip2

2. 已注册流的Socket传输方式:tcp、udp、unix、udg

3. 已注册的流过滤器: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()函数返回页面的字节数。

1. 流数据压缩存储

我们还能对流数据进行压缩方式的保存。下面的例子进一步使用封装器compress.zlib,将流格式数据保存为压缩格式文件。

0){

$file = “data/$url.gz”;

//加入压缩流过滤器

$f = fopen(“compress.zlib://$file”,”w”);

fwrite($f,$page);

fclose($f);

echo “文件成功写入”.filesize($file).”字节”;

}

?>

1. 上例我们已经将取得文件流的数据,并压缩保存成一个文件,我们仍然用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应用中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值