• 技术文章 >php教程 >php手册

    php的网站程序备份源码下载

    2016-06-13 11:25:51原创292
    这是一款关于网站目录备份的php教程网站备份程序了,他可以对你能操作权限的目录进行打包生成rar压缩文件哦,希望有需要的朋友下载看看。




    网站程序备份




    error_reporting(E_ALL & ~E_NOTICE);
    ini_set('memory_limit', '2048M');
    echo "选择要压缩的文件或目录:
    ";
    $fdir = opendir('./');
    while($file=readdir($fdir))
    {
    if($file=='.'|| $file=='..')
    continue;
    echo " ";
    if(is_file($file))
    {
    echo "2 $file
    ";
    }
    else
    {
    echo "0 $file
    ";
    }
    }
    ?>


    包含下列文件类型:


    (文件类型用"|"隔开,默认空则包含任意文件,例:如果需要打包php和jpg文件,则输入"php|jpg")



    压缩文件保存到目录:


    (留空为本目录,必须有写入权限)



    压缩文件名称:


    (.zip)









    error_reporting(E_ALL & ~E_NOTICE);
    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('', '//m.sbmmt.com/m/', $name);
    if(strrchr($name,'//m.sbmmt.com/m/')=='//m.sbmmt.com/m/')
    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 = "x50x4bx03x04";
    $datastr .= "x14x00"; // ver needed to extract
    $datastr .= "x00x00"; // gen purpose bit flag
    $datastr .= "x08x00"; // 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 = "x50x4bx01x02";
    $dirstr .= "x00x00"; // version made by
    $dirstr .= "x14x00"; // version needed to extract
    $dirstr .= "x00x00"; // gen purpose bit flag
    $dirstr .= "x08x00"; // 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("", "//m.sbmmt.com/m/", $name);
    $datastr = "x50x4bx03x04x0ax00x00x00x00x00x00x00x00x00";
    $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 = "x50x4bx01x02x00x00x0ax00x00x00x00x00x00x00x00x00";
    $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 = "x50x4bx05x06x00x00x00x00" .
    pack('v', $this -> file_count) .
    pack('v', $this -> file_count) .
    pack('V', $this -> dirstr_len) .
    pack('V', $this -> datastr_len) .
    "x00x00";
    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('','//m.sbmmt.com/m/',trim($_REQUEST[todir]));
    if(!strrchr(strtolower($_REQUEST[todir]),'//m.sbmmt.com/m/')=='//m.sbmmt.com/m/')
    $_REQUEST[todir] .= "//m.sbmmt.com/m/";
    if($_REQUEST[todir]=="//m.sbmmt.com/m/")
    $_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");
    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{
    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("//m.sbmmt.com/m/article/$_REQUEST[todir]$_REQUEST[zipname]"))
    {
    echo "正在添加压缩文件...

    ";
    $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 "2 $file
    ";
    }
    else
    {
    echo "0 $file
    ";
    }
    $filenum += listfiles($file);
    }
    $dodozip -> createfile();
    echo "
    压缩完成,共添加 $filenum 个文件.
    $_REQUEST[todir]$_REQUEST[zipname] (".num_bitunit(filesize("//m.sbmmt.com/m/article/$_REQUEST[todir]$_REQUEST[zipname]")).")";
    }
    else
    {
    echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.
    ";
    }
    }
    ?>


    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php图片上传,可实现预览 下一篇:实用的php购物车程序
    Web大前端开发直播班

    相关文章推荐

    • php实现高效获取图片尺寸的方法• php使用ffmpeg向视频中添加文字字幕的实现方法,• 大型网站带来的问题,大型网站带来问题• PHP实现搜索相似图片,• PHP中字符安全过滤函数使用总结

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网