文章作者:netcloud
文章来源:邪恶八进制安全小组
想发一个主题贴,各个版块过了一遍才发现都不让发,只好找一个“拖拉机”拖着。
这是我的第一个贴子。
自己编写的一个PHP程序,用来合并一个目录中所有文件及子目录,并保持目录结构不变。考虑到经常上传个论坛到空间,上千个文件,速度很慢,因此而写。
程序比较粗糙但自认为还是比较实用的。
<?
$tm1=time();
echo "<H3 align=center>PHPPACK1.0</H3><p>本程序可以合并指定目录中所有文件及子目录,你可以在本地使用该程序合并众多文件,这样你在向PHP空间上传时只需上传这一个文件,大大节省上传时间。同样,要下载PHP空间上众多文件之前可以将本程序上传,然后在服务器上执行本程序,将它们合并成为一个文件,方便下载。合并时不会删除原文件。<br>要还原这些文件请使用phpunpack.php。<br>注意:指定压缩后的文件名要确保不与现有文件重名,否则将<font color='red'>不加提示地覆盖</font>同名文件!<br>使用完后,请从你的网站上删除本程序,以免被他人恶意使用。<br>本程序可能会对您的数据造成破坏,对此<a href='
http://winning.uni.cc'>云岭e站</a>及<a href='mailto:netcloud@163.com'>netcloud</a>不负任何法律责任。";
global $all,$curpath,$num,$filename,$dir;
if(trim($dir)=="")
{
echo '<form name=form1 method=post action=phppack.php> 请输入要压缩的目录名<input name=dir type=text id=dir>(压缩当前目录请输入"."--不包括引号) <br>
请输入压缩之后的文件名<input name=filename type=text id=fn value="current.pak"> <input type=submit name=Submit value=合并></form><br>
<center>本程序由<a href="
http://winning.uni.cc">云岭e站</a>制作,有问题请与<a href="mailto:netcloud@163.com">netcloud</a>联系。</center><br>';
exit;
}
else
{
if(trim($dir)=='.') $dir='';
if(!($all=fopen($filename,"wb")))
{ echo "不能创建合并文件,请确定当前目录您具有写权限!\n"; exit;}
$curpath="./";
fwrite($all,$curpath.$dir."]]]]d]]]] [[[[");
packdir($dir);
echo "全部处理完毕!共处理目录及文件$num 个!";
echo "<br>
<center>本程序由<a href='
http://winning.uni.cc'>云岭e站</a>制作,有问题请与<a href='mailto:netcloud@163.com'>netcloud</a>联系。</center><br>";
exit;
}
function packdir($dir)
{
global $all,$curpath,$num;
if(!chdir($dir))
{ echo "指定的目录$dir"."不存在或不是一个目录!\n";return; }
$curpath=$curpath.$dir."/";
if(!($curdir=opendir('.')))
{ echo "读取目录$dir"."失败!\n"; return; }
echo "正在处理目录$curpath ... <br>";
while($curfiles=readdir($curdir)){
if (trim($curfiles)=="."||trim($curfiles)==".."||trim($curfiles)==_FILE_||trim($curfiles)==trim($filename))
continue;
$tm2=time();
if($tm2-$tm1>25) {$tm1=$tm2;set_time_limit(25);}//此处是防止处理文件数量很多时,服务器执行程序超时限制。
$num++;
if(is_dir($curfiles))
{
fwrite($all,$curpath.$curfiles."]]]]d]]]] [[[[");
packdir($curfiles);
}
else
{
$curfsize=filesize($curfiles);
$curf=fopen($curfiles,"rb");
$contents=fread($curf,$curfsize);
fwrite($all,$curpath.$curfiles."]]]]".$curfsize."]]]]".$contents."[[[[");
fclose($curf);
}
}
echo "目录$curpath 处理完毕 :) <p>";
$len=strlen($curpath);
#echo "$len\t";
$curpath=substr($curpath,0,$len-1);
#echo "$curpath\t";
$pos=strrpos($curpath,"/");
#echo "$pos\t";
$curpath=substr($curpath,0,$pos+1);
#echo "$curpath<p>";
closedir($curdir);
chdir("..");
}
?>