php网站程序备份源码下载
这是一款关于网站目录备份的php教程网站备份程序了,他可以对你能操作权限的目录进行打包生成rar压缩文件,希望有需要的朋友下载看看,实例代码如下:
<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= '反选' onclick= 'selrev();' > <input type= "submit" name= "Submit" value= " 开始压缩 " > <script language= '网页特效' > 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 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 ( "" , "/" , $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 ( '' , '/' ,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 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>" ; } //开源代码phpfensi测试数据 else { echo "$_REQUEST[todir]$_REQUEST[zipname] 不能写入,请检查路径或权限是否正确.<br>" ; } } ?> </form> </body> </html>查看更多关于php网站程序备份源码下载 - php高级应用的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did30248