PHP网站备份程序代码分享

效果图:

PHP代码

复制代码 代码如下:

网站程序备份

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)

function selrev()

{

with(document.myform)

{

for(i=0;i

{

thiselm = elements[i];

if(thiselm.name.match(/dfile\[]/))

thiselm.checked = !thiselm.checked;

}

}

}

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('\\', '/', $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");

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("$_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("$_REQUEST[todir]$_REQUEST[zipname]")).")";

}

else

{

echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.
";

}

}

?>

相关阅读:

比较详细的关于javascript中void(0)的具体含义解释

历数CSS缩写的一些好处

javascript css 三级目录(简单的)

ASP.NET 中公有的六种验证控件

Apache下伪静态html(URL Rewrite)的设置方法

非常不错的MySQL优化的8条经验

MYSQL教程:状态文件和日志文件

oracle实现树的存储过程

一段在asp中加密与解密对应的函数

php中处理模拟rewrite 效果

vbs实现的下拉框对应键入值

CHR(10)表示换行,CHR(13)表示回车,CHR(32)表示空格

C#正则实现Ubb解析类的代码

MySQL 服务器参数说明及查看 设置方法

php代码怎么复制_PHP_PHP网站备份程序代码分享,效果图:PHP代码 复制代码 代码 - phpStudy...相关推荐

  1. 雷军20年前作文:我会当一辈子程序员 + 分享雷军22年前写的代码

    身为小米科技的创始人.董事长和首席执行官,雷军的名字如雷贯耳.其实扒扒雷军的年轻时代,其实他大学读的是计算机专业,是程序员出身,而且一干就是10年.有网友曾说"代码只服雷军".雷军 ...

  2. 微信小程序怎么长按复制_微信小程序基于Parser添加长按复制、代码高亮等功能...

    功能展示 引入Parser 微信小程序中引入Parser可直接在项目主页查阅. 代码高亮 高亮插件 Prism官网下载prism.js和prism.css,默认只有css代码有渲染样式,注意选择需要渲 ...

  3. c语言不用strcpy复制字符串,c语言程序(二十三)——字符串复制(不使用strcpy()函数)...

    //有一字符串,编写一函数,将此字符串从第m个字符开始的全部字符复制成另一个字符串 // #include #include int main() { char string1[100]; char ...

  4. php验证码大全(实例分享),php文件上传代码大全(实例分...-php验证码大全(实例分享)-php打印倒三角的实例代码_169IT.COM...

    本节主要内容: php中的文件上传代码 在我们平时的php编程中,涉及文件上传的内容很多,无论是简单的留言本程序,还是复杂的新闻系统,甚至是功能完备的cms系统中,都少不了文件上传的功能与代码. 本文 ...

  5. 微信小程序如何分享到朋友圈

    微信小程序之前的分享是不支持直接分享到朋友圈的,之前分享的处理方式一般都是通过canvas生成分享海报,然后将生成的海报图发送到朋友圈中来达到分享的目的.不过从基础库 2.11.3 开始,分享朋友圈的 ...

  6. 中秋节祝福程序源代码分享:土地分类数据阈值筛选和重投影分类

    今年的中秋又要到啦,我的中秋节祝福程序源代码分享:过什么节,代码走起! 今天主要给大家介绍的是关于一个如何对影像重投影然后获取特定阈值情况下的影像 先看结果: 原始影像 重投影后的影像: 这里用到的数 ...

  7. 代码雨代码源复制_小程序基于Parser添加长按复制、代码高亮等功能

    程序员技术之旅网站/小程序/公众号进入小程序 功能展示 引入Parser 微信小程序中引入Parser可直接在GitHub项目主页(https://github.com/jin-yufeng/Pars ...

  8. PHP网站安装程序的原理及代码

    原文:PHP网站安装程序的原理及代码 原理: 其实PHP程序的安装原理无非就是将数据库结构和内容导入到相应的数据库中,从这个过程中重新配置连接数据库的参数和文件,为了保证不被别人恶意使用安装文件,当安 ...

  9. 复制加网站信息的javascript代码及对应的javascript阻止命令

    复制加网站信息的javascript代码 代码 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  ...

最新文章

  1. 通过tushare获取贵州茅台和中国平安历史交易数据并使用plotly进行可视化分析
  2. 第18章 多线程----线程同步
  3. 他们爬了7000家创业公司数据,发现这些领域没那么容易应用AI
  4. SpringBoot 中发布ApplicationEventPublisher,监听ApplicationEvent 异步操作
  5. python 列表生成式_python 列表生成式 List Comprehensions
  6. python中lambda函数对时间排序_python – 使用lambda函数排序()
  7. mysql 怎么创建B Tree索引_MySQL为什么选择B+Tree做索引
  8. 阿里云部署django项目流程【centos7+python3+mysql】
  9. 把字母排序ASC表c语言,c语言ASCII码排序
  10. 【引用】MySQL定时任务
  11. 个人网站建设教程|本地网站环境搭建|网站制作教程
  12. HTML动画滑动图片特效
  13. springnbsp;contextnbsp;初始化两次导致dub…
  14. opencv 数学形态学(2) 膨胀运算:dilate
  15. android emoji转换成字符串,安卓的emoji表情转换为文字
  16. java调用百度内容审核接口检查文本
  17. C#简易播放器(WindowsMediaPlayer)
  18. 华为 BGP/MPLS VP#实验
  19. php chinapay,GitHub - jakehu/chinapay-for-ecshop: 上海银联(chinapay)支付插件 for ECSHOP
  20. 硬件描述语言VHDL之并行语句基本使用介绍

热门文章

  1. 洛谷P1162 填涂颜色
  2. Lombok框架集成与原理解析
  3. SQL Server 2008用'sa'登录失败,启用'sa'登录的办法
  4. windows添加删除静态路由
  5. java List的用法
  6. laravel debug,http模式,日志
  7. 配置overlay(overlayfs)根目录挂载构建debian
  8. 明星不是梦#利用Python进行网站日志分析
  9. 怎样解决IPv4网络和IPv6网络的共存互通?
  10. 在CentOS7.2上部署基于PostgreSQL10的citus分布式数据库