PHP网站备份程序代码分享

news/2024/5/20 13:01:21/文章来源:https://blog.csdn.net/binsoft/article/details/25825333

php中通过代码备份网站的实现代码,很方面大家在线备份网站,需要的朋友可以参考下。

详细出处参考:http://www.jb51.net/article/27337.htm

效果图:



PHP代码 

<html> 

<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 
<title>网站程序备份</title> 
</head> 
<body> 
<form name="myform" method="post" action=""> 
<?php 
error_reporting(E_ALL & ~E_NOTICE); 
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="__dwb2011__" size="15"> 
<font color="red"> 
(留空为本目录,必须有写入权限) 
</font> 
<br> 
压缩文件名称: 
<input name="zipname" type="text" id="zipname" value="dwb2011.zip" size="15"> 
<font color="red"> 
(.zip) 
</font> 
<br> 
<br> 
<input name="myaction" type="hidden" id="myaction" value="dozip"> 
<input type='button' value='反选' οnclick='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 
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<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> 
</body> 
</html> 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_862904.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用ThinkPHP框架快速开发网站(多图)

使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站&#xff0c;基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助&#xff0c;那就更好了挖。 以前用PHP做过一个很蹩脚的网站&#xff0…

微信扫描二维码登录网站技术原理

微信扫描二维码登录网站 网站应用微信登录开发指南 微信扫描二维码登录网站是微信开放平台下网站应用的一种接口实现的功能。微信开放平台的网址是 https://open.weixin.qq.com 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信…

Nginx网站服务的搭建和优化、重写跳转

1.Nginx简介 1.概况 Nginx&#xff1a; Nginx是一个高性能的HTTP和反向代理服务器是一款轻量级的高性能的web服务器/反向代理服务器/电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器单台物理服务器可支持30 000&#xff5e;50 000个并发请求&#xff08;实际上20000-3…

山寨网站正确的做法

下了网站的源码&#xff0c;结果有问题&#xff0c;短时间调试无果&#xff0c;试了各种网站下载器&#xff0c;下载的网站不能看。最后&#xff0c;决定手动来。 思路&#xff1a;一个网页一个网页的扒 工具&#xff1a;火狐浏览器、迅雷、一个新建的文本、PHPStorm9、PHPStud…

网站二级域名与一级目录的选择

读者问: 很多人都说子站包围主站会很有利,想问一下关于子站的问题 子站(二级域名)相对于网站的一级目录来说,权威性是不是要大些? 搜索引擎是把子站作为独立的一个站来看待?还是也算为一级目录来看待? 如果是作为独立的一个站来看待,那主站的内容就少了,那流量会算进主站吗?…

使用Display: None来隐藏内容是合法的SEO吗?

如果你正在优化一个有上千页面的网站&#xff0c;那么你很有可能同一个CMS系统在打交道。但是&#xff0c;CMS系统经常会带来很多搜索引擎优化问题。如果CMS的开发者不熟悉搜索引擎工作原理的话&#xff0c;即使他们本来没有打算欺骗搜索引擎&#xff0c;但最终的结果还是会导致…

Web发展简史((webapp+Java原生)移动端开发 )+web网站)

Web发展简史--------->(&#xff08;webappJava原生&#xff09;移动端开发(微信小程序&#xff0c;公众号&#xff0c;头条app))web网站) Web发展简史 1&#xff1a;在那时&#xff0c;Web开发还比较简单&#xff0c;开发者经常会去操作web服务器(主要还是他自己的机器)&…

购买云服务器和搭建PHP环境,运行PHP个人网站

1&#xff1a;首先需要购买云服务器 阿里云&#xff0c;百度云&#xff0c;腾讯云&#xff0c;华为云等那一家的都一样。我以腾讯云为例子说明&#xff0c;我买的是腾讯云。 1&#xff1a;本人学生&#xff0c;直接购买腾讯云10元一月的学生服务器。购买前需要先注册腾讯云的账…

sun.com跳转到oracle.com,sun网站logo变更

今天准备下载最新版本的jdk时,发现sun网站logo已经改为oracle, 色调风格也与oracle一致。 http://java.sun.com/j2se: jdk下载页面: sun.com 跳转至oracle 怀念一下原来的sun页面:

叉包舍-虚拟网之L2TP组网用户访问内部网站故障分析处理

一、问题描述 L2tp组网用户反映&#xff0c;无法打开其内网的一个网站&#xff0c;地址为172.20.252.8&#xff0c;但可以打开其他网站&#xff0c;如&#xff1a;172.20.12.131&#xff1b; 二、组网拓扑 用户接入―交换机---城域网ERX&#xff08;LAC&#xff09; -----Eudem…

在线教育网站数据分析——搭建指标体系

接触了很多的在线教育的客户之后发现&#xff0c;在线这个领域市场竞争已经呈现白热化的态势。在线教育的品牌方数字化发展没那么快&#xff0c;但是他们都意识到了互联网战场必须占领&#xff0c;所以医疗和在线教育每年在线上投入的营销费用很高&#xff0c;一个中型的公司&a…

python3+beautifulSoup4.6抓取某网站小说(二)基础功能设计

本章学习内容&#xff1a;1、网页编码还原读取2、功能设计 stuep1:网页编码还原读取 本次抓取对象&#xff1a; http://www.cuiweijuxs.com/jingpinxiaoshuo/按照第一篇的代码来进行抓取&#xff1a; # -*- coding: UTF-8 -*- from urllib import requestif __name__ "__…

python3+beautifulSoup4.6抓取某网站小说(三)网页分析,BeautifulSoup解析

本章学习内容&#xff1a;将网站上的小说都爬下来&#xff0c;存储到本地。 目标网站&#xff1a;www.cuiweijuxs.com 分析页面&#xff0c;发现一共4步&#xff1a;从主页进入分版打开分页列表、打开分页下所有链接、打开作品页面、打开单章内容。 所以实现步骤如下&#xff1…

python3+beautifulSoup4.6抓取某网站小说(四)多线程抓取

上一篇多文章&#xff0c;是二级目录&#xff0c;根目录“小说”&#xff0c;二级目录“作品名称”&#xff0c;之后就是小说文件。 本篇改造了部分代码&#xff0c;将目录设置为根目录->作者目录->作品目录->作品章节.txt. 但这并不是本章内容当重点&#xff0c;重点…

个人建站mac下安装hexo

title: 个人建站&mac下安装hexo date: 2018-04-18 16:34:02 tags: [mac,blog,个人建站,markdown] --- 这两天使用了markdown来写文章&#xff0c;发觉甚是好用。条理清晰&#xff0c;排版清爽。so&#xff0c;萌生了使用支持markdown的hexo来进行个人建站。 setup 1 安装no…

网站开发规范及流程v1.5

Web 开发的分散性和交互性&#xff0c;决定了 Web 开发必须遵从一定的开发规范和技术约定&#xff0c;只有每个开发人员都按照一个共同的规范去设计、沟通、开发、测试、部署&#xff0c;才能保证整个开发团队协调一致的工作&#xff0c;从而提高开发工作效率&#xff0c;提升工…

漫谈网站开发规范

任何一个项目或者系统开发之前都需要定制一个开发约定和规则&#xff0c;这样有利于项目的整体风格统一、代码维护和扩展。由于Web项目开发的分散性、独立性、整合的交互性等&#xff0c;所以定制一套完整的约定和规则显得尤为重要。本文档将定制一系列约定和规则&#xff0c;他…

很多php网站的详细页点进去都是html,请问怎么做到的?

主  题&#xff1a;很多php网站的详细页点进去都是html&#xff0c;请问怎么做到的&#xff1f; 作  者&#xff1a;gaosj (我很想做程序员啊) 等  级&#xff1a; 信 誉 值&#xff1a;100 所属社区&#xff1a;Web 开发 PHP 问题点数&#xff1a;100 回复次数&#xff…

阿里云CentosJDK安装,Tomact环境搭建网页建站

文章目录 前言一、JDK是什么&#xff1f;二、JDK环境安装步骤1.安装jdk环境2.创建目录可以参考Centos基本命令&#xff08;点击跳转&#xff09;Linux vi/vim | 菜鸟教程 &#xff08;点击跳转&#xff09;vi命令详解 &#xff08;点击跳转&#xff09; 3、安装JDK3、设置环境变…