如何格式化shell_exec返回的值

jiansva 2016-01-25 11:14:15
最近通过shell_exec执行unzip -v命令,得到对应的zip压缩包里面的文件列表信息,返回的是字符串,如何格式化输出返回值为数组形式?
Archive: 222.zip Length Method Size Cmpr Date Time CRC-32 Name -------- ------ ------- ---- ---------- ----- -------- ---- 33897 Defl:N 7291 79% 2012-07-09 23:47 b2422d19 PEAR.php 34308 Defl:N 3029 91% 2012-07-09 23:47 b91b5a63 chmod.define 2102 Defl:N 802 62% 2012-07-09 23:47 f0f7e112 chmod.php 32 Stored 32 0% 2012-07-09 23:47 4c619b26 config.php 2356 Defl:N 852 64% 2012-10-17 04:02 78e8243d copy.php 1991 Defl:N 749 62% 2012-07-09 23:47 f04a4f36 delete.php 1659 Defl:N 695 58% 2012-07-09 23:47 9a8594b8 dirinfo.php 371 Defl:N 254 32% 2012-07-09 23:47 efcd4941 download.php 1807 Defl:N 830 54% 2012-07-09 23:47 b1033f7d editor.php 609 Defl:N 397 35% 2012-07-09 23:47 c33f5e72 exit.php 50326 Defl:N 11596 77% 2012-07-09 23:47 38dbd073 geshi/java.php 4057 Defl:N 1295 68% 2012-07-09 23:47 d2d188c1 view.php 1626 Defl:N 762 53% 2012-07-09 23:47 27f54c9c viewcode.php -------- ------- --- ------- 3552318 1349142 62% 69 files
...全文
168 点赞 收藏 12
写回复
12 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jiansva 2016-02-01
回复
xuzuning 2016-02-01
$s =<<< TXT
Archive: 321.zip Zip file size: 416 bytes, number of entries: 3 
-rw-a-- 6.3 fat 6 bx stor 16-Jan-25 14:50 2.txt 
-rw-a-- 6.3 fat 21 bx stor 16-Jan-25 14:50 3.php 
-rw-a-- 6.3 fat 1 bx stor 16-Jan-25 14:49 1.txt 
3 files, 28 bytes uncompressed, 28 bytes compressed: 0.0%
TXT;

foreach(preg_split("/[\r\n]+/", $s) as $v) $t[] = str_getcsv($v, ' ', '');
print_r($t);
Array
(
    [0] => Array
        (
            [0] => Archive:
            [1] => 321.zip
            [2] => Zip
            [3] => file
            [4] => size:
            [5] => 416
            [6] => bytes,
            [7] => number
            [8] => of
            [9] => entries:
            [10] => 3
            [11] => 
        )

    [1] => Array
        (
            [0] => -rw-a--
            [1] => 6.3
            [2] => fat
            [3] => 6
            [4] => bx
            [5] => stor
            [6] => 16-Jan-25
            [7] => 14:50
            [8] => 2.txt
            [9] => 
        )

    [2] => Array
        (
            [0] => -rw-a--
            [1] => 6.3
            [2] => fat
            [3] => 21
            [4] => bx
            [5] => stor
            [6] => 16-Jan-25
            [7] => 14:50
            [8] => 3.php
            [9] => 
        )

    [3] => Array
        (
            [0] => -rw-a--
            [1] => 6.3
            [2] => fat
            [3] => 1
            [4] => bx
            [5] => stor
            [6] => 16-Jan-25
            [7] => 14:49
            [8] => 1.txt
            [9] => 
        )

    [4] => Array
        (
            [0] => 3
            [1] => files,
            [2] => 28
            [3] => bytes
            [4] => uncompressed,
            [5] => 28
            [6] => bytes
            [7] => compressed:
            [8] => 0.0%
        )

)

是不是解析的比你的好?
回复
jiansva 2016-02-01
<?php $string=shell_exec("zipinfo 222.zip"); file_put_contents('11.txt', $string); $file = fopen("11.txt", "r") or exit("Unable to open file!"); if ($file) { while (!feof($file)) { $buffer = fgets($file, 4096); if(strstr($buffer,'Archive')){ $zipname=end(explode(':',$buffer)); }elseif(strstr($buffer,'size:')){ $arr1=explode(':',$buffer); $arr=explode(',',$arr1[1]); $zipsize=$arr[0]; }elseif(strstr($buffer,'---')){ $arr=explode('bx',$buffer); $name=end(explode(' ',end($arr))); $sizestring=$arr[0]; $size=end(explode(' ', trim($sizestring))); $buffer=$name.':'.$size; $list=array( 'name' => $name, 'size' => $size, ); } } $data['zipname']=$zipname; $data['zipsize']=$zipsize; $data['filelist']=$list; print_r($data); //echo json_decode($result); fclose($file); } ?> 最后输出来的数组,filelist只有一条list数据,怎么将所有的list都输出来?
回复
jiansva 2016-01-25
另外主贴用的是unzip,所以有点不一样,最后我贴出来跟你的那个都是zipinfo
回复
jiansva 2016-01-25
不好意思,可能是直接粘浏览器出来的,所以看起来好像有格式,实际上跟下面是一样的
回复
xuzuning 2016-01-25
你 主贴和#4 贴出的内容是带格式的吗? 机器不是人,没了格式符,他怎知道谁是谁?
回复
jiansva 2016-01-25
我直接在linux下运行的结果也是 Archive: 321.zip Zip file size: 416 bytes, number of entries: 3 -rw-a-- 6.3 fat 6 bx stor 16-Jan-25 14:50 2.txt -rw-a-- 6.3 fat 21 bx stor 16-Jan-25 14:50 3.php -rw-a-- 6.3 fat 1 bx stor 16-Jan-25 14:49 1.txt 3 files, 28 bytes uncompressed, 28 bytes compressed: 0.0% 没有丢失,没明白你的意思。
回复
xuzuning 2016-01-25
zipinfo 产生的报告是含有控制符的。在控制台看到的至少是这样
Archive: 321.zip Zip file size: 416 bytes, number of entries: 3 
-rw-a-- 6.3 fat 6 bx stor 16-Jan-25 14:50 2.txt 
-rw-a-- 6.3 fat 21 bx stor 16-Jan-25 14:50 3.php 
-rw-a-- 6.3 fat 1 bx stor 16-Jan-25 14:49 1.txt 
3 files, 28 bytes uncompressed, 28 bytes compressed: 0.0%
你只贴出了在浏览器看到的结果,控制符都丢失了,解读起来就非常麻烦了
回复
jiansva 2016-01-25
恩,是这么回事。我是通过shell_exec执行unzip -v命令,就是想得到zip包里面的文件的所有信息。 我现在将1.txt、2.txt、3.php压缩成321.zip。 1.txt里面就是1 2.txt里面是123456 3.php里面是: <?php phpinfo(); ?> echo $string=shell_exec("zipinfo 321.zip"); 得到的数据为: Archive: 321.zip Zip file size: 416 bytes, number of entries: 3 -rw-a-- 6.3 fat 6 bx stor 16-Jan-25 14:50 2.txt -rw-a-- 6.3 fat 21 bx stor 16-Jan-25 14:50 3.php -rw-a-- 6.3 fat 1 bx stor 16-Jan-25 14:49 1.txt 3 files, 28 bytes uncompressed, 28 bytes compressed: 0.0% 得到的这一串,我怎么把他转变为数组形式,这里因为文件只有3个,所以字符串少。我最上面那是文件数比较多的时候的情况。
回复
xuzuning 2016-01-25
你没有给出原始的数据格式,到底该如何做,不好说 再说 php 内置的 ZipArchive,已经提供了这样的功能。并不需要通过解读外部报告来实现 如果你是想用解读报告来练练手,那么就需要给出完整的原始数据
回复
jiansva 2016-01-25
这个......不行吧
回复
傲雪星枫 2016-01-25
explode(' ', $str);
回复
相关推荐
发帖
基础编程
创建于2007-09-28

2.1w+

社区成员

从PHP安装配置,PHP入门,PHP基础到PHP应用
申请成为版主
帖子事件
创建了帖子
2016-01-25 11:14
社区公告
暂无公告