php版网站站打包程序【配合webshell】(原创)

因为大马只能下载一些单文件,无法下载文件夹里的文件,所以花费一些时间写了一个PHP脚本,打包全站数据,在此分享!切勿做违法事情!

使用方法:

1、将该程序上传到网站的目录下,如/zip.php ;

2、在浏览器中访问程序 http://www.xuetong365.com/zip.php ;

3、将出现上图所示界面,可按照提示说明进行相关的操作;

4、点击压缩,稍等片刻(根据网站数据量的大小等待的时间不同),即可压缩完成;

5、压缩完成后会显示压缩文件的下载地址,可选择在线下载也可以使用FTP进行下载;

代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>PHP整站打包程序</title>
</head>
<body>
<form name="myform" method="post" action="">
  <?php
ini_set(‘memory_limit‘, ‘2048M‘);
echo "选择要压缩的文件或目录:<br>";
$fdir = opendir(‘./‘);
while ($file = readdir($fdir)) {
    if ($file == ‘.‘ || $file == ‘..‘)
        continue;
    echo "<input name=‘dfile[]‘ type=‘checkbox‘ value=‘$file‘ " . ($file == basename(__FILE__) ? "" : "checked") . "> ";

    if (is_file($file)) {
        echo "<font face=\"wingdings\" size=\"5\">2</font>  $file<br>";
    } else {
        echo "<font face=\"wingdings\" size=\"5\">0</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‘>
 function selrev()
 {
  with(document.myform)
  {
   for(i=0;i<elements.length;i++)
   {
    thiselm = elements[i];
    if(thiselm.name.match(/dfile\[]/))
     thiselm.checked = !thiselm.checked;
   }
  }
 }
</script>
  <?php
set_time_limit(0);
class PHPzip
{
    var $file_count = 0;
    var $datastr_len = 0;
    var $dirstr_len = 0;
    var $filedata = ‘‘; //该变量只被类外部程序访问
    var $gzfilename;
    var $fp;
    var $dirstr = ‘‘;
    var $filefilters = array();

    function SetFileFilter($filetype)
    {
        $this->filefilters = explode(‘|‘, $filetype);
    }

    //返回文件的修改时间格式.
    //只为本类内部函数调用.
    function unix2DosTime($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‘] << 11) | ($timearray[‘minutes‘] << 5) | ($timearray[‘seconds‘] >> 1);
    }

    //初始化文件,建立文件目录,
    //并返回文件的写入权限.
    function startfile($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")) {
            return true;
        }

        return false;
    }

    //添加一个文件到 zip 压缩包中.
    function addfile($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;
    }
    function adddir($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;
    }

    function createfile()
    {
        //压缩包结束信息,包括文件总数,目录信息读取指针位置等信息
        $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] = "./";

function listfiles($dir = ".") //列出目录的文件  读入目录里面的文件
{
    global $dodozip; //全局
    $sub_file_num = 0;
    if (is_file("$dir")) {
        if (realpath($dodozip->gzfilename) != realpath("$dir")) {
            $dodozip->addfile(implode(‘‘, file("$dir")), "$dir"); //将文件读取出来,写个$dir命名文件夹
            return 1;
        }
        return 0;
    }

    $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;
}

function num_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 = new PHPzip;
    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($file); //读取目录.
        }
        $dodozip->createfile();

        echo "<br>压缩完成,共添加 $filenum 个文件.<br><a href=‘$_REQUEST[todir]$_REQUEST[zipname]‘ _fcksavedurl=‘$_REQUEST[todir]$_REQUEST[zipname]‘>$_REQUEST[todir]$_REQUEST[zipname] (" . num_bitunit(filesize("$_REQUEST[todir]$_REQUEST[zipname]")) . ")</a>";
    } else {
        echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.<br>";
    }
}
?>
</form>
<hr color="#003388">
</body>
</html>

  

原文地址:https://www.cnblogs.com/68xi/p/9413233.html

时间: 2024-11-06 03:47:59

php版网站站打包程序【配合webshell】(原创)的相关文章

新版一元云购源码 1元购网站 一元夺宝源码微信商城手机版建站

新版一元云购源码 1元购网站 一元夺宝源码微信商城手机版建站,有10多年的技术团队开发定制,打造,需要定制,私聊我,谢谢. 全局功能:系统设置通过系统设置,可设置网页版.手机版.微信版.APP的基本信息,比如名称.Logo.文章.邮箱.短信.支付接口等.01全局功能:自定义界面系统目前已开源,支持自定义模版和标签文案修改,一个兼职程序员即可修改模版和任何文案,可高度化修改为站长想要的样子.02全局功能:SEO优化针对模版里的每个单页面,进行了全面的优化,从Sitemap.关键词.描述.图片ALT

恒宝娱乐×××4.0整站打包无删减,附带手机版,4.0×××源码华为生态的乘数效应

恒宝娱乐×××4.0整站打包无删减,附带手机版,4.0×××源码 下载地址 一年一度的华为中国生态伙伴大会,是了解.观察华为企业业务最好的机会和平台. 2017年,在长沙举办的华为中国生态伙伴大会,以"因聚而生-Σco-Partner"为主题."Σ"是一个数学符号,本意是聚合.华为希望把更多伙伴聚集在一起,形成一种生生不息的循环,在数字化转型之路上走得更远更好.2018年,即将在青岛举办的华为中国生态伙伴大会,主题更新为"因聚而生·以行致盛-Σco-XA&

bootstrap源文件&amp;库文件&amp;中文文档离线网页版&amp;网站例子[程序吧 www.qhttl.com]

最近想起了做网站前台,现在流行的是响应式设计,无奈自己不会,网上照了照,居然发现了bootstrap,分享出来 内部包含有bootstrap源文件&库文件&中文文档离线网页版&网站例子网页版,下载无密码 下载地址:http://www.qhttl.com/detail/v-38593-bootstrapyuanwenjiankuwenjianzhongwenwendanglixian.html

十大建站开源程序

目前互联网上有无数个开源的建站程序可供大家选择使用,对现在的站长来说真的是容易多了,10年前我作网站的时候,一个小聊天程序也要自己一句一句的写,看看现在的开源程序,层出不穷.太多了也就不知道选哪个好了,很多初学者买域名建网站,可是不知道如何下手,希望这篇文章能给您的网站建设开个好头,这也就是我Anki写这篇文章的目的.  1.PhpBB - 论坛讨论板 phpBB具有友好的用户界面,使用了当今网 络上流行的php语言工作,可以搭配MySQL,MS- SQL,PostgreSQL, 和Access

手机版WEB开发经验分享,手机版网站开发注意事项,网站自适应,手机版网站自适应,移动安卓APP自适应

转自 http://my.oschina.net/cart/blog/282477 做前端开发不短了,用过jQuery Mobile jqMobi 也纯手工写过.. 最后总结如下: jQuery Mobile:适合大而全,兼容性高,功能全,但是文件大,略显臃肿..如果你是网页版.手机版共用jquery库等 适合使用jQuery Mobile. jqMobi:适合单独就是手机版的站,体积小,速度快,但是兼容性没有jQuery Mobile好,功能没有jQuery Mobile全,但是一般也够用啦.

WAP、触屏版网站及APP的区别

 1.电脑版网站: 电脑版网站是指用户通过台式或者笔记本电脑浏览器打开的网站,也就是我们平时上网所访问的网站.其支持和兼容IE6.IE7.IE8.IE9.IE10.Firefox.Chrome等各种主流浏览器,该网站通常包含一些网站应用程序及系统(如:CMS网站内容管理系统等),并包含了独立的数据库及完整的后台管理系统,是企业开展网络营销和电子商务的基础. 为了管理和维护方便,其手机WAP版网站.手机触屏版网站.手机APP应用等通常共享同一个数据库和管理后台. 2.手机WAP版网站: WAP网站

WebApp触屏版网站开发要点

所谓的触屏版网站其实也是WebApp的一种展示形式,主要是依赖HTML+CSS+Javascript这三个关键因素来实现,相比较原生客户端程序来说优点就是开发周期短.升级简单.维护成本低,因为从根本上来说WebApp的本质就是一个网站而已.这里就说一下如何开发一个适合在触屏设备上展示的页面. 如果有在PC端开发网页的基础那么去处理手机端就很容易上手,这里介绍的是针对手持设备专门处理的页面,而不是媒体查询那种展示方式. 这里提供几个meta属性 使页面不可以认为放大缩小,喜欢用手指捏来捏去的童鞋要

sphider 丁廷臣简体中文完美汉化版带蜘蛛搜索引擎程序 v1.3.4

sphider 丁廷臣简体中文完美汉化版带蜘蛛搜索引擎程序 v1.3.4是最官方的新版,免费开源,用官方最新发布原版汉化.未更改任何内核文件. Sphider 是一个完美的带有蜘蛛的搜索引擎程序. Sphider是一个轻量级,采用PHP开发的web spider和搜索引擎,使用mysql来存储数据.可以利用它来为自己的网站添加搜索功能.Sphider非常小,易于安装和修改,已经有数千网站在使用它. 官方主页 http://www.sphider.eu/ 点击下载sphider 丁廷臣简体中文完美

VB.NET 自动打包程序

因为每次将编译好的程序提交时都要花费很多时间用来打包,因此我需要有一个让程序自动完成这些琐碎的工作. 首先说一下我的目标.我的C#程序(在本文中暂时称作Example.exe)编译后暂时存放在Debug目录中,该程序有两种形态:平台端和客户端,它们分别给不同的用户使用,这两个客户端的不同之处仅在与App.config(可以被看做一个XML文件)中的配置不同.打包时需要先使用NSIS脚本对Debug目录下的内容制作成安装包,再使用WinRAR将安装包进行压缩.除了两个安装包外,还需要提供一些文件放