当前位置:首页 > PHP教程 > php高级应用 > 列表

php网站程序备份源码下载

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-06 14:16:12 浏览: 评论:0 

这是一款关于网站目录备份的php教程网站备份程序了,他可以对你能操作权限的目录进行打包生成rar压缩文件,希望有需要的朋友下载看看,实例代码如下:

  1. <html>  
  2. <head>  
  3. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
  4. <title>网站程序备份</title>  
  5. </head>  
  6. <body>  
  7. <form name="myform" method="post" action="">  
  8. <?php  
  9. error_reporting(E_ALL & ~E_NOTICE);  
  10. ini_set('memory_limit''2048M');  
  11. echo "选择要压缩的文件或目录:<br>";  
  12. $fdir = opendir('./');  
  13. while($file=readdir($fdir))  
  14. {  
  15. if($file=='.'|| $file=='..')  
  16. continue;  
  17. echo "<input name='dfile[]' type='checkbox' value='$file' ".($file==basename(__FILE__)?"":"checked")."> ";  
  18. if(is_file($file))  
  19. {  
  20. echo "<font face="wingdings" size="5">2</font> $file<br>";  
  21. }  
  22. else  
  23. {  
  24. echo "<font face="wingdings" size="5">0</font> $file<br>";  
  25. }  
  26. }  
  27. ?>  
  28. <br>  
  29. 包含下列文件类型:  
  30. <input name="file_type" type="text" id="file_type" value="" size="50">  
  31. <font color="red">  
  32. (文件类型用"|"隔开,默认空则包含任意文件,例:如果需要打包php和jpg文件,则输入"php|jpg")  
  33. </font>  
  34. <br>  
  35. 压缩文件保存到目录:  
  36. <input name="todir" type="text" id="todir" value="__dwb2011__" size="15">  
  37. <font color="red">  
  38. (留空为本目录,必须有写入权限)  
  39. </font>  
  40. <br>  
  41. 压缩文件名称:  
  42. <input name="zipname" type="text" id="zipname" value="dwb2011.zip" size="15">  
  43. <font color="red">  
  44. (.zip)  
  45. </font>  
  46. <br>  
  47. <br>  
  48. <input name="myaction" type="hidden" id="myaction" value="dozip">  
  49. <input type='button' value='反选' onclick='selrev();'>  
  50. <input type="submit" name="Submit" value=" 开始压缩 ">  
  51. <script language='网页特效'>  
  52. function selrev()  
  53. {  
  54. with(document.myform)  
  55. {  
  56. for(i=0;i<elements.length;i++)  
  57. {  
  58. thiselm = elements[i];  
  59. if(thiselm.name.match(/dfile[]/))  
  60. thiselm.checked = !thiselm.checked;  
  61. }  
  62. }  
  63. }  
  64. </script>  
  65. <?php  
  66. error_reporting(E_ALL & ~E_NOTICE);  
  67. set_time_limit(0);  
  68. class PHPzip  
  69. {  
  70. var $file_count = 0 ;  
  71. var $datastr_len = 0;  
  72. var $dirstr_len = 0;  
  73. var $filedata = ''//该变量只被类外部程序访问  
  74. var $gzfilename;  
  75. var $fp;  
  76. var $dirstr='';  
  77. var $filefilters = array();  
  78. function SetFileFilter($filetype)  
  79. {  
  80. $this->filefilters = explode('|',$filetype);  
  81. }  
  82. //返回文件的修改时间格式.  
  83. //只为本类内部函数调用.  
  84. function unix2DosTime($unixtime = 0)  
  85. {  
  86. $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);  
  87. if ($timearray['year'] < 1980)  
  88. {  
  89. $timearray['year'] = 1980;  
  90. $timearray['mon'] = 1;  
  91. $timearray['mday'] = 1;  
  92. $timearray['hours'] = 0;  
  93. $timearray['minutes'] = 0;  
  94. $timearray['seconds'] = 0;  
  95. }  
  96. return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);  
  97. }  
  98. //初始化文件,建立文件目录,  
  99. //并返回文件的写入权限.  
  100. function startfile($path = 'dodo.zip')  
  101. {  
  102. $this->gzfilename=$path;  
  103. $mypathdir=array();  
  104. do  
  105. {  
  106. $mypathdir[] = $path = dirname($path);  
  107. while($path != '.');  
  108. @end($mypathdir);  
  109. do  
  110. {  
  111. $path = @current($mypathdir);  
  112. @mkdir($path);  
  113. while(@prev($mypathdir));  
  114. if($this->fp=@fopen($this->gzfilename,"w"))  
  115. {  
  116. return true;  
  117. }  
  118. return false;  
  119. }  
  120. //添加一个文件到 zip 压缩包中.  
  121. function addfile($data$name)  
  122. {  
  123. $name = str_replace('''/'$name);  
  124. if(strrchr($name,'/')=='/')  
  125. return $this->adddir($name);  
  126. if(!emptyempty($this->filefilters))  
  127. {  
  128. if (!in_array(end(explode(".",$name)), $this->filefilters))  
  129. {  
  130. return;  
  131. }  
  132. }  
  133. $dtime = dechex($this->unix2DosTime());  
  134. $hexdtime = 'x' . $dtime[6] . $dtime[7] . 'x' . $dtime[4] . $dtime[5] . 'x' . $dtime[2] . $dtime[3] . 'x' . $dtime[0] . $dtime[1];  
  135. eval('$hexdtime = "' . $hexdtime . '";');  
  136. $unc_len = strlen($data);  
  137. $crc = crc32($data);  
  138. $zdata = gzcompress($data);  
  139. $c_len = strlen($zdata);  
  140. $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2);  
  141. //新添文件内容格式化:  
  142. $datastr = "x50x4bx03x04";  
  143. $datastr .= "x14x00"// ver needed to extract  
  144. $datastr .= "x00x00"// gen purpose bit flag  
  145. $datastr .= "x08x00"// compression method  
  146. $datastr .= $hexdtime// last mod time and date  
  147. $datastr .= pack('V'$crc); // crc32  
  148. $datastr .= pack('V'$c_len); // compressed filesize  
  149. $datastr .= pack('V'$unc_len); // uncompressed filesize  
  150. $datastr .= pack('v'strlen($name)); // length of filename  
  151. $datastr .= pack('v', 0); // extra field length  
  152. $datastr .= $name;  
  153. $datastr .= $zdata;  
  154. $datastr .= pack('V'$crc); // crc32  
  155. $datastr .= pack('V'$c_len); // compressed filesize  
  156. $datastr .= pack('V'$unc_len); // uncompressed filesize  
  157. fwrite($this->fp,$datastr); //写入新的文件内容  
  158. $my_datastr_len = strlen($datastr);  
  159. unset($datastr);  
  160. //新添文件目录信息  
  161. $dirstr = "x50x4bx01x02";  
  162. $dirstr .= "x00x00"// version made by  
  163. $dirstr .= "x14x00"// version needed to extract  
  164. $dirstr .= "x00x00"// gen purpose bit flag  
  165. $dirstr .= "x08x00"// compression method  
  166. $dirstr .= $hexdtime// last mod time & date  
  167. $dirstr .= pack('V'$crc); // crc32  
  168. $dirstr .= pack('V'$c_len); // compressed filesize  
  169. $dirstr .= pack('V'$unc_len); // uncompressed filesize  
  170. $dirstr .= pack('v'strlen($name) ); // length of filename  
  171. $dirstr .= pack('v', 0 ); // extra field length  
  172. $dirstr .= pack('v', 0 ); // file comment length  
  173. $dirstr .= pack('v', 0 ); // disk number start  
  174. $dirstr .= pack('v', 0 ); // internal file attributes  
  175. $dirstr .= pack('V', 32 ); // external file attributes - 'archive' bit set  
  176. $dirstr .= pack('V',$this->datastr_len ); // relative offset of local header  
  177. $dirstr .= $name;  
  178. $this->dirstr .= $dirstr//目录信息  
  179. $this -> file_count ++;  
  180. $this -> dirstr_len += strlen($dirstr);  
  181. $this -> datastr_len += $my_datastr_len;  
  182. }  
  183. function adddir($name)  
  184. {  
  185. $name = str_replace("""/"$name);  
  186. $datastr = "x50x4bx03x04x0ax00x00x00x00x00x00x00x00x00";  
  187. $datastr .= pack("V",0).pack("V",0).pack("V",0).pack("v"strlen($name) );  
  188. $datastr .= pack("v", 0 ).$name.pack("V", 0).pack("V", 0).pack("V", 0);  
  189. fwrite($this->fp,$datastr); //写入新的文件内容  
  190. $my_datastr_len = strlen($datastr);  
  191. unset($datastr);  
  192. $dirstr = "x50x4bx01x02x00x00x0ax00x00x00x00x00x00x00x00x00";  
  193. $dirstr .= pack("V",0).pack("V",0).pack("V",0).pack("v"strlen($name) );  
  194. $dirstr .= pack("v", 0 ).pack("v", 0 ).pack("v", 0 ).pack("v", 0 );  
  195. $dirstr .= pack("V", 16 ).pack("V",$this->datastr_len).$name;  
  196. $this->dirstr .= $dirstr//目录信息  
  197. $this -> file_count ++;  
  198. $this -> dirstr_len += strlen($dirstr);  
  199. $this -> datastr_len += $my_datastr_len;  
  200. }  
  201. function createfile()  
  202. {  
  203. //压缩包结束信息,包括文件总数,目录信息读取指针位置等信息  
  204. $endstr = "x50x4bx05x06x00x00x00x00" .  
  205. pack('v'$this -> file_count) .  
  206. pack('v'$this -> file_count) .  
  207. pack('V'$this -> dirstr_len) .  
  208. pack('V'$this -> datastr_len) .  
  209. "x00x00";  
  210. fwrite($this->fp,$this->dirstr.$endstr);  
  211. fclose($this->fp);  
  212. }  
  213. }  
  214. if(!trim($_REQUEST[zipname]))  
  215. $_REQUEST[zipname] = "dodozip.zip";  
  216. else  
  217. $_REQUEST[zipname] = trim($_REQUEST[zipname]);  
  218. if(!strrchr(strtolower($_REQUEST[zipname]),'.')=='.zip')  
  219. $_REQUEST[zipname] .= ".zip";  
  220. $_REQUEST[todir] = str_replace('','/',trim($_REQUEST[todir]));  
  221. if(!strrchr(strtolower($_REQUEST[todir]),'/')=='/')  
  222. $_REQUEST[todir] .= "/";  
  223. if($_REQUEST[todir]=="/")  
  224. $_REQUEST[todir] = "./";  
  225. function listfiles($dir=".")  
  226. {  
  227. global $dodozip;  
  228. $sub_file_num = 0;  
  229. if(is_file("$dir"))  
  230. {  
  231. if(realpath($dodozip ->gzfilename)!=realpath("$dir"))  
  232. {  
  233. $dodozip -> addfile(implode('',file("$dir")),"$dir");  
  234. return 1;  
  235. }  
  236. return 0;  
  237. }  
  238. $handle=opendir("$dir");  
  239. while ($file = readdir($handle))  
  240. {  
  241. if($file=="."||$file=="..")  
  242. continue;  
  243. if(is_dir("$dir/$file"))  
  244. {  
  245. $sub_file_num += listfiles("$dir/$file");  
  246. }  
  247. else  
  248. {  
  249. if(realpath($dodozip ->gzfilename)!=realpath("$dir/$file"))  
  250. {  
  251. $dodozip -> addfile(implode('',file("$dir/$file")),"$dir/$file");  
  252. $sub_file_num ++;  
  253. }  
  254. }  
  255. }  
  256. closedir($handle);  
  257. if(!$sub_file_num)  
  258. $dodozip -> addfile("","$dir/");  
  259. return $sub_file_num;  
  260. }  
  261. function num_bitunit($num)  
  262. {  
  263. $bitunit=array(' B',' KB',' MB',' GB');  
  264. for($key=0;$key<count($bitunit);$key++)  
  265. {  
  266. if($num>=pow(2,10*$key)-1)  
  267. //1023B 会显示为 1KB  
  268. $num_bitunit_str=(ceil($num/pow(2,10*$key)*100)/100)." $bitunit[$key]";  
  269. }  
  270. }  
  271. return $num_bitunit_str;  
  272. }  
  273. if(is_array($_REQUEST[dfile]))  
  274. {  
  275. $dodozip = new PHPzip;  
  276. if($_REQUEST["file_type"] != NULL)  
  277. $dodozip -> SetFileFilter($_REQUEST["file_type"]);  
  278. if($dodozip -> startfile("$_REQUEST[todir]$_REQUEST[zipname]"))  
  279. {  
  280. echo "正在添加压缩文件...<br><br>";  
  281. $filenum = 0;  
  282. foreach($_REQUEST[dfile] as $file)  
  283. {  
  284. if(is_file($file))  
  285. {  
  286. if(!emptyempty($dodozip -> filefilters))  
  287. if (!in_array(end(explode(".",$file)), $dodozip -> filefilters))  
  288. continue;  
  289. echo "<font face="wingdings" size="5">2</font> $file<br>";  
  290. }  
  291. else  
  292. {  
  293. echo "<font face="wingdings" size="5">0</font> $file<br>";  
  294. }  
  295. $filenum += listfiles($file);  
  296. }  
  297. $dodozip -> createfile();  
  298. 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>";  
  299. //开源代码phpfensi.com 
  300. else  
  301. {  
  302. echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.<br>";  
  303. }  
  304. }  
  305. ?>  
  306. </form>  
  307. </body>  
  308. </html> 

Tags: php源码下载 php程序备份

分享到: