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);
}
}
}