php里面支持读很多伪协议的流 其中就包括zip流 对于zip包我们通用的做法是通过 zip 扩展解压 然后读文件,这里提供一个很少人知道的 流操作 读取zip压缩包。
先看下效果

上代码 t.zip是文件名 test.py 是你要直接读的文件
<?php
$file_protocol = "zip://t.zip#test.py";
$fp = fopen($file_protocol, 'rb');
if (!$fp) {
return false;
}
while (!feof($fp)) {
echo fread($fp, 1024);
}
fclose($fp);
------smtp的伪协议流也可以直接读 并且可以增加过滤器
<?php
$dateStart=new \DateTime();
$dateInterval= DateInterval::createFromDateString('-1day');
$datePeriod=new \DatePeriod($dateStart,$dateInterval,30);
foreach($datePeriodasas$date){
$file='sftp://USER:PASS@rsycn.net/' . $date->format("Y-m-d") . '.log.bz2';
$handle=fopen($file);
stream_filter_append($handle,'bzip2.decompress');
while(true != feof($handle)){
$line = fgets($handle);
if(strpos($line,'www.example') != false){
fwrite(STDOUT,$line);
}
}
}
本文介绍了一种利用PHP内置流操作直接读取ZIP压缩包中的文件的方法,并展示了如何使用SMTP伪协议流结合过滤器来解压并读取BZ2压缩的日志文件。
&spm=1001.2101.3001.5002&articleId=81137489&d=1&t=3&u=bca32c93cd3a4c3e973d25070dfe7498)
1058

被折叠的 条评论
为什么被折叠?



