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