mrp修改打包解包函数.php读取mrp

2011/12/12 13:07:00  人气 705    修改美化论坛  

------------------
bmmrp.php 用于mrp文件解、打包(需要zlib扩展库支持)
<?php
function mrpgetlist($$f)
{
$$f=fopen($$f,’rb’);
if(fread($$f,4)!=’MRPG’)
return false;
$$r=240;
fseek($$f,4,SEEK_SET);
$$s=hexdec(bin2hex(strrev(fread($$f,4))));
for(;true;)
{
if($$r>$$s) break;
fseek($$f,$$r,SEEK_SET);
$$x=hexdec(bin2hex(fread($$f,1)));
$$r+=4;
fseek($$f,$$r,SEEK_SET);
$$n=fread($$f,$$x-1);
$$r+=$$x;
fseek($$f,$$r,SEEK_SET);
$$v=hexdec(bin2hex(strrev(fread($$f,4))));
$$r+=4;
fseek($$f,$$r,SEEK_SEK);
$$l=hexdec(bin2hex(strrev(fread($$f,4))));
$$r+=8;
$$list[]=array(’n’=>$$n,’v’=>$$v,’l’=>$$l);
}
fclose($$f);
return $$list;
}
function mrpunpack($$fname,$$dir,$$list=null)
{
$$f=fopen($$fname,’rb’);
if(fread($$f,4)!=’MRPG’)
return false;
if($$list==null) $$list=mrpgetlist($$fname);
mkdir($$dir);
foreach($$list as $$a)
{
$$j++;
fseek($$f,$$a[’v’],SEEK_SET);
#$$x=fread($$f,$$a[’l’]);
#$$a[’n’]=mrpcname($$a[’n’],$$dir);
file_put_contents(($$fn=“$$dir/$$j.$$a[n].txt“).’.gz’,fread($$f,$$a[’l’]));
$$gz=gzopen($$fn.’.gz’,’r’);
#$$gz2=gzread($$gz,10000000);
file_put_contents($$fn,gzread($$gz,10000000));
gzclose($$gz);
}
fclose($$f);
return $$list;
}
function mrppacklist($$list,$$gzip=3)
{
if($$gzip<1 or $$gzip>9)
$$gzip=3;
foreach($$list as $$a)
{
if(!file_exists($$a)) continue;
#$$af=file_get_contents($$a);
$$gz=gzopen($$a.“.gz“,“w“.$$gzip);
gzwrite($$gz,file_get_contents($$a));
gzclose($$gz);
$$al=filesize($$a.’.gz’);
$$na=eregi_replace(chr(94).’.*[\\/]([0-9]+\.)?(.[’.chr(94).’\\/]*)\.txt$$’,’\\2’,$$a);
#$$na=eregi_replace(’\([0-9]+\)$$’,’’,$$na);
$$n=strlen($$na)+1;
$$nn+=$$n;
$$lst[]=array($$na,$$a.’.gz’,$$al,$$n);
}
$$lstl=16*($$jc=count($$lst))+$$nn;
$$lst[0][]=$$lstl+248+$$lst[0][3];
for($$a=1;$$a<$$jc;$$a++)
$$lst[$$a][]=$$lst[$$a-1][4]+$$lst[$$a-1][2]+8+$$lst[$$a][3];
return $$lst;
}
function mrppack($$f,$$lst,$$mrp)
{
if(!function_exists(’binadd’)) include ’dnmrp.php’;
$$f=fopen($$f,’rb’);
if(fread($$f,4)!=’MRPG’)
return false;
fseek($$f,8,SEEK_SET);
$$fa=fread($$f,232);
fclose($$f);
$$x=chr(0);
foreach($$lst as $$a)
{
$$wz=strrev(pack(’H*’,binadd(dechex($$a[4]),8)));
$$cd=strrev(pack(’H*’,binadd(dechex($$a[2]),8)));
$$fl=pack(’H*’,binadd(dechex($$a[3]),2));
#$$x=chr(0);
$$filelist.=$$fl.$$x.$$x.$$x.$$a[0].$$x.$$wz.$$cd.$$x.$$x.$$x.$$x;
$$dat.=$$fl.$$x.$$x.$$x.$$a[0].$$x.$$cd.file_get_contents($$a[1]);
}
$$start=strrev(pack(’H*’,binadd(dechex($$lst[0][4]-$$lst[0][3]-16),8)));
file_put_contents($$mrp,“MRPG“.$$start.$$fa.$$filelist.$$dat);
return $$lst;
}
function mrpcname($$f,$$dir)
{
if(file_exists(“$$dir/$$f.txt“) or eregi(“\([0-9]+\)$$“,$$f))
$$g=true;
for($$a=0;$$g or file_exists(“$$dir/$$f($$a).txt“);$$a++)
{$$j=“(“.($$a+1).“)“;
$$g=false;}
return “$$f$$j“;
}
?>
------------------
dnmrp.php使用例程:mrpgai.php

<?php
include “mime.php“;
?><!DOCTYPE html PUBLIC “-//WAPFORUM//DTD XHTML Mobile 1.0//EN“

“http://www.wapforum.org/DTD/xhtml-mobile10.dtd“>
<html xmlns=“http://www.w3.org/1999/xhtml“>
<head>
<meta http-equiv=“Content-Type“ content=“<?php echo $$mime; ?>; ***set=<?php echo

strtolower($$html_code); ?>“/>
<?php include “css.php“; ?><title>mrp内部信息修改</title>
</head>
<body>
<p><a id=“top“ href=“#bottom“ accesskey=“6“></a>
<?php
$$d=$$_GET[’d’];
echo ’<a href=“read.php?id=mrpindex&d=’.$$d.’“>mrp高级修改</a><br/>’;
include ’dnmrp.php’;
if($$v=getmrp(“mrptmp/$$d.mrp“))
{
if(!$$_POST[’go’])
{ ?>
<form accept-***set=“utf-8“ action=“read.php?id=mrpgai&d=<?php echo $$d; ?>“

method=“post“>
应用id:<input type=“text“ name=“id“ value=“<?php echo str_replace(’&’,’&’,$$v[’id’]); ?

>“/><br/>
版本id:<input type=“text“ name=“bb“ value=“<?php echo str_replace(’&’,’&’,$$v[’bb’]); ?

>“/><br/>
串号:<input type=“text“ name=“ch“ value=“<?php echo $$v[’ch’]; ?>“/><br/>
内部名:<input type=“text“ name=“nn“ value=“<?php echo $$v[’nn’]; ?>“/><br/>
显示名:<input type=“text“ name=“xn“ value=“<?php echo $$v[’xn’]; ?>“/><br/>
作者:<input type=“text“ name=“zz“ value=“<?php echo $$v[’zz’]; ?>“/><br/>
介绍:<input type=“text“ name=“js“ value=“<?php echo $$v[’js’]; ?>“/><br/>
<input type=“submit“ name=“go“ value=“确定“/>
</form>
<?php }
else
{
include ’bmtxt.php’;
$$v=$$_POST;
if(putmrp($$f=“mrptmp/$$d.mrp“,$$v))
{
copy($$f,$$f.’.gz’);
echo ’修改成功<br/><a href=“mrptmp/’.$$d.’.mrp.gz?t=’.time().’“>下载</a><br/>’;
}
else
{echo “修改失败,文件过期或已损坏<br/>“;
unlink(“mrptmp/$$d.mrp“);}
echo ’<a href=“read.php?id=mrpgai&d=’.$$d.’“>返回修改</a>’;
}
}
else echo ’文件过期或已损坏,请<a href=“read.php?id=mrpup“>返回重传</a>’;
?>
</p><hr/><p><?php echo date(“m-d H:i“); ?><br/><a href=“read.php?id=mrpup“>返回上级

</a>-<a href=“index.php“>首页</a>
<a id=“bottom“ href=“#top“ accesskey=“3“></a></p>
</body>
</html>
------------------
bmmrp.php使用例程:mrppack.php
<?php
/********取得指定目录下指定类型的文件*******/
function dirgetlist($$dirname,$$bds=“.*“)
{
if($$handle=opendir($$dirname))
{
while(false!==($$file=readdir($$handle)))
{
if($$file!=“.“ && $$file!=“..“ && eregi($$bds,$$file))
{
$$list[]=$$dirname.’/’.$$file;
}}
closedir($$handle);
}
natcasesort($$list);
return $$list;
}
/***************/
function doonce($$f,$$t=5,$$e=’’)
{
$$ttl=file_get_contents($$f);
if(($$tt=($$tm=time())-$$ttl)<$$t)
{
echo str_replace($$t,$$t-$$tt,$$e);
return false;
}
file_put_contents($$f,$$tm);
return true;
}
function doonceend($$f)
{
return true;
}
/********这个是被包含在另一个文件中的部分用户界面*******/
$$d=floor($$_GET[’d’]);
$$go=$$_REQUEST[’go’];
include ’bmmrp.php’;
if($$go==’清空’)
{
$$lst=dirgetlist(“mrptmp/$$d“,’.*’);
foreach($$lst as $$a=>$$r)
unlink($$r);
unlink(“mrptmp/$$d“);
echo “文件已清空<br/>共删除“.($$a+1).“个文件<br/>“;
}
elseif($$go==’解包’ && doonce(’mrptmp/mrpunpack.php’,20,’解包过于频繁,请20秒后再试’))
{
$$lst=mrpunpack($$mrp,“mrptmp/$$d“);
echo “解包成功<br/>共解出“.count($$lst).“个文件<br/>“;
}
elseif($$go==’打包’ && doonce(’mrptmp/mrppack.php’,30,’打包过于频繁,请30秒后再试’))
{
$$list=dirgetlist(“mrptmp/$$d“,’.*\.txt$$’);
$$lst=mrppack(“mrptmp/$$d.mrp“,mrppacklist($$list,$$_POST[’gzip’]),$$mr_fn=“mrptmp/$$d.mrp“);
copy($$mr_fn,$$mr_fn.’.gz’);
echo “打包成功<br/>共打包“.count($$lst).“个文件(“.round(filesize(“mrptmp/

$$d.mrp“)/1024,2).“KB)<br/><a href=\“mrptmp/$$d.mrp.gz?t=“.time().“\“>下载</a>-<a

href=\“read.php?id=mrpgai&d=$$d\“>修改信息</a><br/>“;
$$mrppack=true;
下页    上页    全部    余下    
 

. 请牢记绝客网域名:jkniu.com jkmrp.com

发表回复

   


  通知楼主

4楼

老虎改吃草.01-14 15:04
看不懂

回复只看TA

地板

烟消^【云散】.12-13 19:45
√☆爱得过火★★

回复只看TA

椅子

★风流小猪★.12-12 20:49
顶老大

回复只看TA

沙发

『韩雅』 √☆爱得过火★★.12-12 13:11
:很好!(此回复虽有且仅有两个字,却深刻地表达了回复人的深深的祝福,可谓言简意赅,一字千金,字字扣人心弦,字字催人泪下,足可见回复人扎实的文字功底和信手拈来的写作技巧及惨绝人环的创新能力。实在佩服佩服!再加上以感叹号收尾,点睛之笔,妙笔生花,意境深远,照应前文,升华主题,把回复人的感情表达得淋漓尽致,给人无限感动和惆怅,有浑然天成之感,实乃回复中之极品,祝福中之绝笔

回复只看TA