php-如何格式化shell_exec返回的值

问题描述

如何格式化shell_exec返回的值

最近通过shell_exec执行zipinfo命令,得到对应的zip压缩包里面的文件列表信息,返回的是字符串,如何格式化输出返回值为数组形式?

Archive: 222.zip
Zip file size: 1358592 bytes, number of entries: 69
-rw---- 6.3 fat 33897 bx defN 12-Jul-09 23:47 PEAR.php
-rw---- 6.3 fat 34308 bx defN 12-Jul-09 23:47 chmod.define
-rw---- 6.3 fat 2102 bx defN 12-Jul-09 23:47 chmod.php
-rw---- 6.3 fat 32 bx stor 12-Jul-09 23:47 config.php
-rw---- 6.3 fat 2356 bx defN 12-Oct-17 04:02 copy.php
-rw---- 6.3 fat 1991 bx defN 12-Jul-09 23:47 delete.php
-rw---- 6.3 fat 1659 bx defN 12-Jul-09 23:47 dirinfo.php
-rw---- 6.3 fat 371 bx defN 12-Jul-09 23:47 download.php
-rw---- 6.3 fat 1807 bx defN 12-Jul-09 23:47 editor.php
-rw---- 6.3 fat 609 bx defN 12-Jul-09 23:47 exit.php
-rw---- 6.3 fat 2788 bx defN 12-Sep-23 10:50 fileinfo.php
-rw---- 6.3 fat 3525 bx defN 12-Oct-17 03:46 function.php
drwx--- 6.3 fat 0 bx stor 16-Jan-25 09:54 geshi/
-rw---- 6.3 fat 16993 bx defN 12-Jul-09 23:47 geshi/apache.php
-rw---- 6.3 fat 6038 bx defN 12-Jul-09 23:47 geshi/asp.php
-rw---- 6.3 fat 10457 bx defN 12-Jul-09 23:47 geshi/c.php
-rw---- 6.3 fat 10103 bx defN 12-Jul-09 23:47 geshi/cpp.php
-rw---- 6.3 fat 9900 bx defN 12-Jul-09 23:47 geshi/css.php
-rw---- 6.3 fat 3016 bx defN 12-Jul-09 23:47 geshi/gettext.php
-rw---- 6.3 fat 6824 bx defN 12-Jul-09 23:47 geshi/html4strict.php
-rw---- 6.3 fat 7975 bx defN 12-Jul-09 23:47 geshi/html5.php
-rw---- 6.3 fat 50326 bx defN 12-Jul-09 23:47 geshi/java.php
22 files, 3552318 bytes uncompressed, 1349142 bytes compressed: 62.0%

解决方案

http://bbs.csdn.net/topics/391896428

解决方案二:

<?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都输出来?

解决方案三:

<?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) {
$i=0;
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[$i]=array(
'name' => $name,
'size' => $size,
);
}
$i++;
}
fclose($file);
$list=array_values($list);
$data['zipname']=$zipname;
$data['zipsize']=$zipsize;
$data['filelist']=$list;
//print_r($data);
echo json_encode($data);
}

搞定!

时间: 2024-09-08 23:04:49

php-如何格式化shell_exec返回的值的相关文章

PHP格式化MYSQL返回float类型的方法_php技巧

本文实例讲述了PHP格式化MYSQL返回float类型的方法.分享给大家供大家参考,具体如下: PHP 中获取mysql的float字段,echo 输出后,小数部分为包含多个0. 可使用 floatval($num) 将0舍去. 如要保留小数位,可使用 number_format($num, 2); number_format函数对超过指定位数的值,进行了四舍五入. 如不想四舍五入,而保留所有小数.可使用如下方法: // 如仅想保留两位小数可用 number_format($num, 2); e

求单选按纽的值,适用单选项及多选项。未选返回false;有选择项,返回选项值。

<form name="frm"><input type="radio" value="1" name="radioName"><input type="radio" value="2" name="radioName"><input type="button" onClick="alert(Ch

C#查询SqlServer数据库并返回单个值的方法

  本文实例讲述了C#查询SqlServer数据库并返回单个值的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 static public string GetSqlAsString(string sqlText, SqlParameter[] sqlParameters, string databaseConnectionString) { string result = ""; Sq

VLOOKUP函数返回错误值怎么办?

  VLOOKUP函数 返回错误值的原因和解决方法. 一. VLOOKUP函数基本语法 =VLOOKUP (lookup_value, table_array,col_index_num, [range_lookup]) 这个太复杂了哦,看鹅理解的VLOOKUP函数中文语法吧: =VLOOKUP(查找值,数据源,第几列,模糊查找1/精确查找0) 二. 实例说话 接下来,先看一个VLOOKUP函数的应用实例吧. 通过菜名查询库存数量. C11单元格公式如下: =VLOOKUP(B11,$B$3:$

AFN返回数据值为空,简单问题高悬赏

问题描述 AFN返回数据值为空,简单问题高悬赏 我发现 block里面的数据都是有的,也能打印出来,但是 返回的数据为空 我也知道是异步的问题 自己可以用block接收 但是目前急用 直接需要具体操作 因急用 100块求解决 QQ:396008684 解决方案 这是因为你return toke的时候,异步函数还没有返回,所以toke还没有 执行 toke=dicc[@"token"] 你可以在你的函数中增加一个参数,用block等,这样当异步返回的时候,调用block参数来把数据传递出

操作-asp.net第三方支付,提交成功也返回了支付成功,但是页面取不到返回的值,

问题描述 asp.net第三方支付,提交成功也返回了支付成功,但是页面取不到返回的值, 这样我没办法进行下一步的判断操作,request.querystring,取不到值啊 ,郁闷 解决方案 不知你调用第三方支付的方式,应该是访问第三方的网页,返回应该是html文本内容,调用第三方支付是在客户端还是在服务端?建议在服务端,应该解析返回的字符串,request.querystring是自己客户端发的请求,当然没值了. 解决方案二: 第三方支付,成功后会跳转到你站点某指定路径,并在URL带一些参数返

javascript-js获取css样式返回的值如何进行判断?

问题描述 js获取css样式返回的值如何进行判断? 比如返回了rbg(255,0,0),用直接字符串"rbg(255,0,0)"做相等判断似乎不行,返回false,不知道用什么方法可以做判断? 解决方案 返回了rbg(255,0,0),那么alert下返回值是显示什么的? 解决方案二: 返回值前后可能会有空格,所以判断会可能不相等 解决方案三: 返回的可能不是一个字符串,,typeof看看,,

ajax返回的值一直无法比较

问题描述 ajax返回的值一直无法比较 ajax返回的data与num的一直是false的.尝试了,typeof data和num ,输出的都是string.然后也尝试了toString()等.data == num反回的一直是false,请教一下大神们. function check(){ var num = ""yes""; $.ajax({ cache: false async: false url:""get_session_check.

c++ 传char*给lua 然后lua再返回char* 值不相同

问题描述 c++ 传char*给lua 然后lua再返回char* 值不相同 C++的代码: int main() { lua_State* L = luaL_newstate(); luaL_openlibs(L); luaL_dofile(L, "a.lua"); lua_getglobal(L, "test"); char* str = new char[3]; str[0] = 0; str[1] = 65; str[2] = 66; lua_pushstr