php:整站源码下载好工具
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嗯~就是一个能够打包文件夹内容的PHP小工具。
您曾经是否郁闷过:我黑了别人的网站可是我也想下载他网站的源码,身边却没有好用的文件夹打包工具(很多WebShell工具都只是提供文件打包,不支持文件夹打包);又或是,你想只备份一个文件夹内的所有文件却怕FTP一个一个文件拉取的麻烦。
现在,有了这款DoDo出品的PHP 整站打包程序即可完成您的梦想。
第一代程序截图:
第二代程序截图:
支持目录跳转,支持自定义目录打包。
第二代源码(BY Ca3tie1)
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=gb2312"> <title>PHP整站打包程序-Ca3tie1修改版</title>
</head>
<style type="text/css">
A:LINK {TEXT-DECORATION:none}
A:VISITED {COLOR:#3F3849}
</style>
<body>
<form name="myform"method="post"action="">
<?php
if($_GET[tdir]){
$tdir=$_GET[tdir];
}else{
$tdir='./';
}
ini_set('memory_limit','2048M');
echo"选择要压缩的文件或目录,当前所在目录:".realpath($tdir)."<br>";
//目录列表
$fdir=opendir($tdir);
while($file=readdir($fdir))
{
if(is_dir(realpath($tdir."/".$file)))
{
if($file!=".."&&$file!="."){
echo"<input name='dfile[]' type='checkbox' value='$file' ".($file==basename(__FILE__)?"":"checked")."> ";
echo"<font face=\"wingdings\"size=\"5\">0</font> <ahref=?tdir=".urlencode($tdir."/".$file).">$file</a><br>"; }
elseif($file==".."){
echo "<ahref=?tdir=".urlencode("$tdir/../").">返回上级目录</a><br>";
}
}
}
//文件列表
$fdir = opendir($tdir);
while($file=readdir($fdir))
{
if($file=='.'|| $file=='..')
continue;
if(is_file(realpath($tdir."/".$file)))
{ echo "<input name='dfile[]'type='checkbox'value='$file'".($file==basename(__FILE__)?"":"checked").">"; echo "<font face=\"wingdings\"size=\"5\">2</font> $file<br>";
}
}
?>
<br>
包含下列文件类型:
<input name="file_type"type="text"id="file_type"value=""size="50">
<font color="red">
(文件类型用"|"隔开,默认空则包含任意文件,例:如果需要打包php和jpg文件,则输入"php|jpg")
</font>
<br>
压缩文件保存到目录:
<input name="todir"type="text"id="todir"value="__dodo__"size="15">
<font color="red">
(留空为本目录,必须有写入权限)
</font>
<br>
压缩文件名称:
<input name="zipname"type="text"id="zipname"value="dodo.zip"size="15"> <font color="red">
(.zip)
</font>
<br>
<br>
<input name="myaction"type="hidden"id="myaction"value="dozip">
<input type='button'value='反选'onclick='selrev();'>
<input type="submit"name="Submit"value=" 开始压缩">
<script language='javascript'>
functionselrev()
{
with(document.myform)
{
for(i=0;i<elements.length;i++)
{
thiselm=elements[i];
if(.match(/dfile\[]/))
thiselm.checked = !thiselm.checked; }
}
}
</script>
<?php
set_time_limit(0);
classPHPzip
{
var$file_count=0;
var$datastr_len =0;
var$dirstr_len=0;
var$filedata='';//该变量只被类外部程序访问var$gzfilename;
var$fp;
var$dirstr='';
var$filefilters=array(); functionSetFileFilter($filetype)
{
$this->filefilters=explode('|',$filetype);
}
//返回文件的修改时间格式.
//只为本类内部函数调用.
functionunix2DosTime($unixtime=0)
{
$timearray=($unixtime==0)?getdate():getdate($unixtime);
if($timearray['year']<1980)
{
$timearray['year'] =1980;
$timearray['mon'] =1;
$timearray['mday'] =1;
$timearray['hours'] =0;
$timearray['minutes']=0;
$timearray['seconds']=0;
}
return(($timearray['year']-1980)<<25)|($timearray['mon']<<21)|($timearray['mday']<<16)| ($timearray['hours']<<1 1)|($timearray['minutes']<<5)|($timearray['seconds']>>1);
}
//初始化文件,建立文件目录,
//并返回文件的写入权限.
functionstartfile($path='dodo.zip')
{
$this->gzfilename=$path;
$mypathdir=array();
do
{
$mypathdir[]=$path=dirname($path);
}while($path!='.');
@end($mypathdir);
do
{
$path=@current($mypathdir);
@mkdir($path);
}while(@prev($mypathdir));
if($this->fp=@fopen($this->gzfilename,"w")) {
returntrue;
}
returnfalse;
}
//添加一个文件到zip 压缩包中.
functionaddfile($data,$name)
{
$name=str_replace('\\','/',$name);
if(strrchr($name,'/')=='/')
return$this->adddir($name);
if(!empty($this->filefilters))
{
if(!in_array(end(explode(".",$name)),$this->filefilters))
{
return;
}
}
$dtime=dechex($this->unix2DosTime());
$hexdtime='\x'.$dtime[6].$dtime[7].'\x'.$dtime[4].$dtime[5].'\x'.$dtime[2].$dtime[3].'\x'.$dtime[0].$dtime[1]; eval('$hexdtime = "'.$hexdtime.'";');
$unc_len=strlen($data);
$crc =crc32($data);
$zdata =gzcompress($data);
$c_len =strlen($zdata);
$zdata =substr(substr($zdata,0,strlen($zdata)-4),2);
//新添文件内容格式化:
$datastr ="\x50\x4b\x03\x04";
$datastr.="\x14\x00"; // ver needed to extract $datastr.="\x00\x00"; // gen purpose bit flag $datastr.="\x08\x00"; // compression method $datastr.=$hexdtime; // last mod time and date $datastr.=pack('V',$crc); // crc32
$datastr.=pack('V',$c_len); // compressed filesize $datastr.=pack('V',$unc_len); // uncompressed filesize $datastr.=pack('v',strlen($name)); // length of filename $datastr.=pack('v',0); // extra field length $datastr.=$name;
$datastr.=$zdata;
$datastr.=pack('V',$crc); // crc32
$datastr.=pack('V',$c_len); // compressed filesize $datastr.=pack('V',$unc_len); // uncompressed filesize fwrite($this->fp,$datastr);//写入新的文件内容
$my_datastr_len=strlen($datastr);
unset($datastr);
//新添文件目录信息
$dirstr ="\x50\x4b\x01\x02";
$dirstr.="\x00\x00"; // version made by
$dirstr.="\x14\x00"; // version needed to extract $dirstr.="\x00\x00"; // gen purpose bit flag
$dirstr.="\x08\x00"; // compression method
$dirstr.=$hexdtime; // last mod time & date
$dirstr.=pack('V',$crc); // crc32
$dirstr.=pack('V',$c_len); // compressed filesize
$dirstr.=pack('V',$unc_len); // uncompressed filesize
$dirstr.=pack('v',strlen($name)); // length of filename
$dirstr.=pack('v',0); // extra field length
$dirstr.=pack('v',0); // file comment length
$dirstr.=pack('v',0); // disk number start
$dirstr.=pack('v',0); // internal file attributes
$dirstr.=pack('V',32); // external file attributes - 'archive' bit set $dirstr.=pack('V',$this->datastr_len);// relative offset of local header $dirstr.=$name;
$this->dirstr.=$dirstr;//目录信息
$this->file_count++;
$this->dirstr_len+=strlen($dirstr);
$this->datastr_len+=$my_datastr_len;
}
functionadddir($name)
{
$name=str_replace("\\","/",$name);
$datastr="\x50\x4b\x03\x04\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00";
$datastr.=pack("V",0).pack("V",0).pack("V",0).pack("v",strlen($name)); $datastr.=pack("v",0).$name.pack("V",0).pack("V",0).pack("V",0);
fwrite($this->fp,$datastr);//写入新的文件内容
$my_datastr_len=strlen($datastr);
unset($datastr);
$dirstr="\x50\x4b\x01\x02\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00"; $dirstr.=pack("V",0).pack("V",0).pack("V",0).pack("v",strlen($name)); $dirstr.=pack("v",0).pack("v",0).pack("v",0).pack("v",0);
$dirstr.=pack("V",16).pack("V",$this->datastr_len).$name;
$this->dirstr.=$dirstr;//目录信息
$this->file_count++;
$this->dirstr_len+=strlen($dirstr);
$this->datastr_len+=$my_datastr_len;
}
functioncreatefile()
{
//压缩包结束信息,包括文件总数,目录信息读取指针位置等信息
$endstr="\x50\x4b\x05\x06\x00\x00\x00\x00".
pack('v',$this->file_count).
pack('v',$this->file_count).
pack('V',$this->dirstr_len).
pack('V',$this->datastr_len).
"\x00\x00";
fwrite($this->fp,$this->dirstr.$endstr);
fclose($this->fp);
}
}
if(!trim($_REQUEST[zipname]))
$_REQUEST[zipname]="dodozip.zip";
else
$_REQUEST[zipname]=trim($_REQUEST[zipname]);
if(!strrchr(strtolower($_REQUEST[zipname]),'.')=='.zip')
$_REQUEST[zipname].=".zip";
$_REQUEST[todir]=str_replace('\\','/',trim($_REQUEST[todir])); if(!strrchr(strtolower($_REQUEST[todir]),'/')=='/')
$_REQUEST[todir].="/";
if($_REQUEST[todir]=="/")
$_REQUEST[todir]="./";
functionlistfiles($dir="./")
{
global$dodozip;
$sub_file_num=0;
if(is_file("$dir"))
{
if(realpath($dodozip->gzfilename)!=realpath("$dir"))
{
$dodozip->addfile(implode('',file("$dir")),"$dir");
return1;
}
return0;
}
$handle=opendir("$dir");
while($file=readdir($handle))
{
if($file=="."||$file=="..")
continue;
if(is_dir("$dir/$file"))
{
$sub_file_num+=listfiles("$dir/$file");
}
else
{
if(realpath($dodozip->gzfilename)!=realpath("$dir/$file")) {
$dodozip->addfile(implode('',file("$dir/$file")),"$dir/$file"); $sub_file_num++;
}
}
}
closedir($handle);
if(!$sub_file_num)
$dodozip->addfile("","$dir/");
return$sub_file_num;
}
functionnum_bitunit($num)
{
$bitunit=array(' B',' KB',' MB',' GB');
for($key=0;$key<count($bitunit);$key++)
{
if($num>=pow(2,10*$key)-1)
{//1023B 会显示为1KB
$num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]"; }
}
return$num_bitunit_str;
}
if(is_array($_REQUEST[dfile]))
{
$dodozip=newPHPzip;
if($_REQUEST["file_type"]!=NULL)
$dodozip->SetFileFilter($_REQUEST["file_type"]);
if($dodozip->startfile("$_REQUEST[todir]$_REQUEST[zipname]"))
{
echo"正在添加压缩文件...<br><br>";
$filenum=0;
foreach($_REQUEST[dfile]as$file)
{
if(is_file($file))
{
if(!empty($dodozip->filefilters))
if(!in_array(end(explode(".",$file)),$dodozip->filefilters))
continue;
echo"<font face=\"wingdings\"size=\"5\">2</font> $file<br>"; }
else
{
echo "<font face=\"wingdings\"size=\"5\">0</font> $file<br>";
}
$filenum += listfiles(realpath($tdir."/".$file));
}
$dodozip -> createfile();
echo "<br>压缩完成,共添加$filenum个文
件.<br><ahref='$_REQUEST[todir]$_REQUEST[zipname]'_fcksavedurl='$_REQUEST[todir]$_REQUEST[zipna me]'>$_REQUEST[todir]$_REQUEST[zipname](".num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname] ")).")</a>";
}
else
{
echo "$_REQUEST[todir]$_REQUEST[zipname]不能写入,请检查路径或权限是否正确.<br>";
}
}
?>
</form>
<hr color="#003388">
<center>
<ahref="/ca3tie1/home"target="_blank">Ca3tie1'sBlog</a>
</center>
</body>
</html>。