php打包备份好的数据库文件(也可打包别的文件)

简介:
 
  1. <?php 
  2. $z = new PHPZip(); 
  3. $file = array('1.jpg'); 
  4. $zipname = time() . '.zip'
  5. $z->Zip($file$zipname); 
  6.  
  7. /** 
  8. 以下是其他调用这个类的方法: 
  9. $z = new PHPZip(); //新建立一个zip的类 
  10.  
  11. 方法一: 
  12. $z -> Zip("", "out1.zip"); //添加当前目录和子目录下的所有档案 
  13.  
  14. 方法二: 
  15. $files=array('1.txt','gb.txt'); 
  16. $files[]='5.txt'; 
  17. $z -> Zip($files, "out2.zip"); //添加文件列表 
  18.  
  19. 方法三: 
  20. $z -> Zip("/usr/local/sext/", "out3.zip"); //添加指定目录 
  21. */ 
  22.  
  23. class PHPZip 
  24. function Zip($dir$zipfilename
  25. if (@function_exists('gzcompress')) 
  26. $curdir = getcwd(); 
  27. if (is_array($dir)) 
  28. $filelist = $dir
  29. else 
  30. $filelist = $this -> GetFileList($dir); 
  31.  
  32. if ((!emptyempty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir); 
  33. else chdir($curdir); 
  34.  
  35. if (count($filelist)>0) 
  36. foreach($filelist as $filename
  37. if (is_file($filename)) 
  38. $fd = fopen ($filename"r"); 
  39. $content = fread ($fdfilesize ($filename)); 
  40. fclose ($fd); 
  41.  
  42. if (is_array($dir)) $filename = basename($filename); 
  43. $this -> addFile($content$filename); 
  44. $out = $this -> file(); 
  45.  
  46. chdir($curdir); 
  47. $fp = fopen($zipfilename"w"); 
  48. fwrite($fp$outstrlen($out)); 
  49. fclose($fp); 
  50. return 1; 
  51. else return 0; 
  52.  
  53. function GetFileList($dir
  54. if (file_exists($dir)) 
  55. $args = func_get_args(); 
  56. $pref = $args[1]; 
  57.  
  58. $dh = opendir($dir); 
  59. while($files = readdir($dh)) 
  60. if (($files!=".")&&($files!="..")) 
  61. if (is_dir($dir.$files)) 
  62. $curdir = getcwd(); 
  63. chdir($dir.$files); 
  64. $file = array_merge($file$this -> GetFileList("""$pref$files/")); 
  65. chdir($curdir); 
  66. else $file[]=$pref.$files
  67. closedir($dh); 
  68. return $file
  69.  
  70. var $datasec      = array(); 
  71. var $ctrl_dir     = array(); 
  72. var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00"
  73. var $old_offset   = 0; 
  74.  
  75. /** 
  76. * Converts an Unix timestamp to a four byte DOS date and time format (date 
  77. * in high two bytes, time in low two bytes allowing magnitude comparison). 
  78. * 
  79. * @param integer the current Unix timestamp 
  80. * 
  81. * @return integer the current date in a four byte DOS format 
  82. * 
  83. * @access private 
  84. */ 
  85. function unix2DosTime($unixtime = 0) { 
  86. $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime); 
  87.  
  88. if ($timearray['year'] < 1980) { 
  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. // end if 
  96.  
  97. return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) | 
  98. ($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1); 
  99. // end of the 'unix2DosTime()' method 
  100.  
  101.  
  102. /** 
  103. * Adds "file" to archive 
  104. * 
  105. * @param string   file contents 
  106. * @param string   name of the file in the archive (may contains the path) 
  107. * @param integer the current timestamp 
  108. * 
  109. * @access public 
  110. */ 
  111. function addFile($data$name$time = 0) 
  112. $name     = str_replace('\\', '/', $name); 
  113.  
  114. $dtime    = dechex($this->unix2DosTime($time)); 
  115. $hexdtime = '\x' . $dtime[6] . $dtime[7] 
  116. '\x' . $dtime[4] . $dtime[5] 
  117. '\x' . $dtime[2] . $dtime[3] 
  118. '\x' . $dtime[0] . $dtime[1]; 
  119. eval('$hexdtime = "' . $hexdtime . '";'); 
  120.  
  121. $fr   = "\x50\x4b\x03\x04"
  122. $fr   .= "\x14\x00";            // ver needed to extract 
  123. $fr   .= "\x00\x00";            // gen purpose bit flag 
  124. $fr   .= "\x08\x00";            // compression method 
  125. $fr   .= $hexdtime;             // last mod time and date 
  126.  
  127. // "local file header" segment 
  128. $unc_len = strlen($data); 
  129. $crc     = crc32($data); 
  130. $zdata   = gzcompress($data); 
  131. $c_len   = strlen($zdata); 
  132. $zdata   = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug 
  133. $fr      .= pack('V'$crc);             // crc32 
  134. $fr      .= pack('V'$c_len);           // compressed filesize 
  135. $fr      .= pack('V'$unc_len);         // uncompressed filesize 
  136. $fr      .= pack('v'strlen($name));    // length of filename 
  137. $fr      .= pack('v', 0);                // extra field length 
  138. $fr      .= $name
  139.  
  140. // "file data" segment 
  141. $fr .= $zdata
  142.  
  143. // "data descriptor" segment (optional but necessary if archive is not 
  144. // served as file) 
  145. $fr .= pack('V'$crc);                 // crc32 
  146. $fr .= pack('V'$c_len);               // compressed filesize 
  147. $fr .= pack('V'$unc_len);             // uncompressed filesize 
  148.  
  149. // add this entry to array 
  150. $this -> datasec[] = $fr
  151. $new_offset        = strlen(implode(''$this->datasec)); 
  152.  
  153. // now add to central directory record 
  154. $cdrec = "\x50\x4b\x01\x02"
  155. $cdrec .= "\x00\x00";                // version made by 
  156. $cdrec .= "\x14\x00";                // version needed to extract 
  157. $cdrec .= "\x00\x00";                // gen purpose bit flag 
  158. $cdrec .= "\x08\x00";                // compression method 
  159. $cdrec .= $hexdtime;                 // last mod time & date 
  160. $cdrec .= pack('V'$crc);           // crc32 
  161. $cdrec .= pack('V'$c_len);         // compressed filesize 
  162. $cdrec .= pack('V'$unc_len);       // uncompressed filesize 
  163. $cdrec .= pack('v'strlen($name) ); // length of filename 
  164. $cdrec .= pack('v', 0 );             // extra field length 
  165. $cdrec .= pack('v', 0 );             // file comment length 
  166. $cdrec .= pack('v', 0 );             // disk number start 
  167. $cdrec .= pack('v', 0 );             // internal file attributes 
  168. $cdrec .= pack('V', 32 );            // external file attributes - 'archive' bit set 
  169.  
  170. $cdrec .= pack('V'$this -> old_offset ); // relative offset of local header 
  171. $this -> old_offset = $new_offset
  172.  
  173. $cdrec .= $name
  174.  
  175. // optional extra field, file comment goes here 
  176. // save to central directory 
  177. $this -> ctrl_dir[] = $cdrec
  178. // end of the 'addFile()' method 
  179.  
  180.  
  181. /** 
  182. * Dumps out file 
  183. * 
  184. * @return string the zipped file 
  185. * 
  186. * @access public 
  187. */ 
  188. function file() 
  189. $data    = implode(''$this -> datasec); 
  190. $ctrldir = implode(''$this -> ctrl_dir); 
  191.  
  192. return 
  193. $data . 
  194. $ctrldir . 
  195. $this -> eof_ctrl_dir . 
  196. pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk" 
  197. pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall 
  198. pack('V'strlen($ctrldir)) .           // size of central dir 
  199. pack('V'strlen($data)) .              // offset to start of central dir 
  200. "\x00\x00";                             // .zip file comment length 
  201. // end of the 'file()' method 
  202.  
  203.  
  204. // end of the 'PHPZip' class 
  205.  
  206. ?> 

 

      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/882336,如需转载请自行联系原作者


相关文章
|
27天前
|
存储 SQL 关系型数据库
PHP与数据库交互:从基础到进阶
【10月更文挑战第9天】在编程的世界里,数据是流动的血液,而数据库则是存储这些珍贵资源的心脏。PHP作为一门流行的服务器端脚本语言,其与数据库的交互能力至关重要。本文将带你从PHP与数据库的基本连接开始,逐步深入到复杂查询的编写和优化,以及如何使用PHP处理数据库结果。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技巧,让你在PHP和数据库交互的道路上更加从容不迫。
|
1月前
|
SQL 关系型数据库 MySQL
数据库导入SQL文件:全面解析与操作指南
在数据库管理中,将SQL文件导入数据库是一个常见且重要的操作。无论是迁移数据、恢复备份,还是测试和开发环境搭建,掌握如何正确导入SQL文件都至关重要。本文将详细介绍数据库导入SQL文件的全过程,包括准备工作、操作步骤以及常见问题解决方案,旨在为数据库管理员和开发者提供全面的操作指南。一、准备工作在导
179 0
|
1月前
|
SQL 关系型数据库 MySQL
|
24天前
|
存储 关系型数据库 MySQL
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
PACS系统 中 dicom 文件在mysql 8.0 数据库中的 存储和读取(pydicom 库使用)
20 2
|
1月前
|
SQL 存储 关系型数据库
SQL文件导入MySQL数据库的详细指南
数据库中的数据转移是一项常规任务,无论是在数据迁移过程中,还是在数据备份、还原场景中,导入导出SQL文件显得尤为重要。特别是在使用MySQL数据库时,如何将SQL文件导入数据库是一项基本技能。本文将详细介绍如何将SQL文件导入MySQL数据库,并提供一个清晰、完整的步骤指南。这篇文章的内容字数大约在
79 1
|
1月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
145 10
|
1月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
2月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
28天前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
2月前
进入靶场,出现一张照片,右击查看源代码,发现有一个注释的source.php文件
这段代码实现了一个网站上弹出的促销海报动画效果,包含一个关闭按钮。当促销海报弹出时,会在三秒后开始抖动一两下。海报使用固定定位居中显示,带有阴影和圆角,关闭按钮位于右上角。可以通过修改时间参数调整弹出时间。
19 0
下一篇
无影云桌面