国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

php數據庫備份類程序代碼

2024-05-04 21:49:15
字體:
來源:轉載
供稿:網友

今天沒事收集了兩款php數據庫備份程序,這里可以完成功能有:1.備份指定數據表、2.打包成zip文件、3.發送到指定郵箱地址,基本功能就這些了.

下面看下使用方法,代碼如下:

  1. <?php  
  2. error_reporting(0);//消滅萬惡的php報警提示  
  3. //設定郵箱  
  4. $options = array('email' => array('email1''email2'),  
  5. 'folder' => './backup/',  
  6. 'mysql' => array('localhost''user''password''db'));  
  7.    
  8. $b = new Backup($options);  
  9.    
  10.   // 提交備份命令  
  11.   if(isset($_POST['backup']))  
  12.   {  
  13.    // 開始備份  
  14.    $b->backupDB();  
  15.   }  
  16.   // 顯示備份表  
  17.   $b->outputForm();  
  18. ?> 

具體類實現,代碼如下:

  1. <?php  
  2.    
  3. class Backup  
  4. {  
  5. /**  
  6. * @var 用于保存配置參數  
  7. */ 
  8. var $config;  
  9.    
  10. /**  
  11. * @var 用于保存mysql dump的數據  
  12. */ 
  13. var $dump;  
  14.    
  15. /**  
  16. * @var 用于數據庫結果數據以及insert指令  
  17. */ 
  18. var $struktur = array();  
  19.    
  20. /**  
  21. * @var 壓縮文件名zip  
  22. */ 
  23. var $datei;  
  24.    
  25. /**  
  26. * 結構函數  
  27. * 連接數據庫  
  28. * @return  
  29. */ 
  30. public function Backup($options)  
  31. {  
  32. // 從形參中讀取配置  
  33. foreach($options AS $name => $value)  
  34. {  
  35. $this->config[$name] = $value;  
  36. }  
  37.    
  38. // 連接數據庫  
  39. mysql_connect($this->config['mysql'][0], $this->config['mysql'][1],  
  40. $this->config['mysql'][2]) or die(mysql_error());  
  41. mysql_select_db($this->config['mysql'][3]) or die(mysql_error());  
  42. }  
  43.    
  44. /**  
  45. * 執行備份數據庫流程的函數  
  46. * @return  
  47. */ 
  48. public function backupDB()  
  49. {  
  50. // 開始備份的命令  
  51. if(isset($_POST['backup']))  
  52. {  
  53. // 檢測是否選擇了數據表  
  54. if(emptyempty($_POST['table']))  
  55. {  
  56. die("請選擇一個數據表。");  
  57. }  
  58.    
  59. /** 開始備份 **/ 
  60. $tables = array();  
  61. $insert = array();  
  62. $sql_statement = '';  
  63.    
  64. // 鎖定需要備份的數據庫,防止讀臟數據  
  65. foreach($_POST['table'] AS $table)  
  66. {  
  67. mysql_query("LOCK TABLE $table WRITE");  
  68.    
  69. // 獲取數據庫結構  
  70. $res = mysql_query('SHOW CREATE TABLE '.$table.'');  
  71. $createtable = mysql_result($res, 0, 1);  
  72. $str = "nn".$createtable."nn";  
  73.    
  74. array_push($tables$str);  
  75.    
  76. // 查詢數據表中的所有數據行  
  77. $sql = 'SELECT * FROM '.$table;  
  78. $query = mysql_query($sqlor die(mysql_error());  
  79. $feld_anzahl = mysql_num_fields($query);  
  80.    
  81. $sql_statement = '--  
  82. -- Data Table `$table`  
  83. --  
  84. ';  
  85.    
  86. // 開始讀數據,并將其轉換為insert命令  
  87. while($ds = mysql_fetch_object($query)){  
  88. $sql_statement .= 'INSERT INTO `'.$table.'` (';  
  89.    
  90. for ($i = 0;$i <$feld_anzahl;$i++){  
  91. if ($i ==$feld_anzahl-1){  
  92. $sql_statement .= mysql_field_name($query,$i);  
  93. else {  
  94. $sql_statement .= mysql_field_name($query,$i).', ';  
  95. }  
  96. }  
  97.    
  98. $sql_statement .= ') VALUES (';  
  99.    
  100. for ($i = 0;$i <$feld_anzahl;$i++){  
  101. $name = mysql_field_name($query,$i);  
  102. if (emptyempty($ds->$name)){  
  103. $ds->$name = 'NULL';  
  104. }  
  105. if ($i ==$feld_anzahl-1){  
  106. $sql_statement .= '"'.$ds->$name.'"';  
  107. else {  
  108. $sql_statement .= '"'.$ds->$name.'", ';  
  109. }  
  110. }  
  111. $sql_statement .= ");n";  
  112. }  
  113.    
  114. // 將insert數據放在數組中,去重  
  115. if(!in_array($sql_statement$insert))  
  116. {  
  117. array_push($insert$sql_statement);  
  118. unset($sql_statement);  
  119. }  
  120.    
  121. unset($sql_statement);  
  122.    
  123. }  
  124.    
  125. // 將數據庫結構與insert命令放在一起啦  
  126. $this->struktur = array_combine($tables$insert);  
  127.    
  128. // 執行dump函數  
  129. $this->createDUMP($this->struktur);  
  130.    
  131. // 生成zip壓縮包  
  132. $this->createZIP();  
  133.    
  134. /** 備份結束 **/ 
  135.    
  136. // 發一封郵件到指定郵箱,附件包含sql備份,如果你設置了的話^_^  
  137. if(isset($this->config['email']) && !emptyempty($this->config['email']))  
  138. {  
  139. $this->sendEmail();  
  140. }  
  141.    
  142. // output  
  143. echo '<h3 style="color:green;">備份完成啦</h3><a href="'.  
  144. $this->datei.'">下載備份</a>  
  145. <br />  
  146. <br />';  
  147. }  
  148. }  
  149.    
  150. /**  
  151. * 發送郵件函數  
  152. * @return  
  153. */ 
  154. protected function sendEmail()  
  155. {  
  156. // 讀取郵箱地址  
  157. foreach($this->config['email'] AS $email)  
  158. {  
  159. $to = $email;  
  160.    
  161. $from = $this->config['email'][0];  
  162.    
  163. $message_body = "本郵件中包含的zip壓縮包為數據庫備份";  
  164.    
  165. $msep = strtoupper (md5 (uniqid (time ())));  
  166.    
  167. // 設置email頭  
  168. $header =  
  169. "From: $fromrn" .  
  170. "MIME-Version: 1.0rn" .  
  171. "Content-Type: multipart/mixed; boundary=".$msep."rnrn" .  
  172. "--$mseprn" .  
  173. "Content-Type: text/plainrn" .  
  174. "Content-Transfer-Encoding: 8bitrnrn" .  
  175. $message_body . "rn";  
  176.    
  177. // 文件名  
  178. $dateiname = $this->datei;  
  179.    
  180. // 壓縮包大小  
  181. $dateigroesse = filesize ($dateiname);  
  182.    
  183. // 讀取壓縮包  
  184. $f = fopen ($dateiname"r");  
  185. // 保存到附件  
  186. $attached_file = fread ($f$dateigroesse);  
  187. // 關閉壓縮包  
  188. fclose ($f);  
  189. // 建立一個附件  
  190. $attachment = chunk_split (base64_encode ($attached_file));  
  191.    
  192. // 設置附件頭  
  193. $header .=  
  194. "--" . $msep . "rn" .  
  195. "Content-Type: application/zip; name='Backup'rn" .  
  196. "Content-Transfer-Encoding: base64rn" .  
  197. "Content-Disposition: attachment; filename='Backup.zip'rn" .  
  198. "Content-Description: Mysql Datenbank Backup im Anhangrnrn" .  
  199. $attachment . "rn";  
  200.    
  201. // 標記附件結束未知  
  202. $header .= "--$msep--";  
  203.    
  204. // 郵件標題  
  205. $subject = "數據庫備份";  
  206.    
  207. // 發送郵件需要開啟php相應支持哦^^  
  208. if(mail($to$subject''$header) == FALSE)  
  209. {  
  210. die("無法發送郵件,請檢查郵箱地址");  
  211. }  
  212.    
  213. echo "<p><small>郵件發送成功</small></p>";  
  214. }  
  215. }  
  216.    
  217. /**  
  218. * 建立數據庫備份的壓縮包并保存到服務器指定目錄中  
  219. * @return  
  220. */ 
  221. protected function createZIP()  
  222. {  
  223.    
  224. // 文件夾權限要夠  
  225. chmod($this->config['folder'], 0777);  
  226.    
  227. // 建立壓縮包  
  228. $zip = new ZipArchive();  
  229. // 設置壓縮包文件名  
  230. $this->datei = $this->config['folder'].$this->config['mysql'][3]."_" 
  231. .date("j_F_Y_g_i_a").".zip";  
  232.    
  233. // 看看壓縮包能不能打開  
  234. if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {  
  235. exit("無法打開 <".$this->datei.">n");  
  236. }  
  237.    
  238. // 把dump出來的數據放到壓縮包里  
  239. $zip->addFromString("dump.sql"$this->dump);  
  240. // 關閉壓縮包  
  241. $zip->close();  
  242.    
  243. // 看看壓縮包有沒有生成  
  244. if(!file_exists($this->datei))  
  245. {  
  246. die("無法生成壓縮包");  
  247. }  
  248.    
  249. echo "<p><small>數據庫備份壓縮包成功生成</small></p>";  
  250. }  
  251.    
  252. /**  
  253. * mysql dump函數  
  254. * @param object $dump  
  255. * @return  
  256. */ 
  257. protected function createDUMP($dump)  
  258. {  
  259. $date = date("F j, Y, g:i a");  
  260.    
  261. $header = <<<HEADER  
  262.         -- SQL Dump  
  263. --  
  264. -- Host: {$_SERVER['HTTP_HOST']}  
  265. -- Erstellungszeit: {$date}  
  266.    
  267. --  
  268. -- Datenbank: `{$this->config['mysql'][3]}`  
  269. --  
  270.    
  271. -- --------------------------------------------------------  
  272.    
  273. HEADER;  
  274. foreach($dump AS $name => $value)  
  275. {  
  276. $sql .= $name.$value;  
  277. }  
  278. $this->dump = $header.$sql;  
  279. }  
  280.    
  281. /**  
  282. * 生成選擇數據表的界面函數  
  283. * @return  
  284. */ 
  285. public function outputForm()  
  286. {  
  287. // 選擇全部  
  288. $result = mysql_list_tables($this->config['mysql'][3]);  
  289.    
  290. $buffer = '  
  291. <fieldset>  
  292. <legend>選擇需要備份的數據表</legend>  
  293. <form method="post" action="">  
  294. <select name="table[]" multiple="multiple" size="30">';  
  295. while($row = mysql_fetch_row($result))  
  296. {  
  297. $buffer .= '<option value="'.$row[0].'">'.$row[0].'</option>';  
  298. }  
  299. $buffer .= '</select>  
  300. <br /><br />  
  301. <input type="submit" name="backup" value="備份選定數據表" />  
  302. </form>  
  303. </fieldset>';  
  304.    
  305. echo $buffer;  
  306. }  
  307. }  
  308.    
  309. ?> 

通用數據庫備份類,代碼如下:

  1. <?php 
  2. /*數據庫備份:NOTICE:此類要添加數據庫連接才能正常工作*/ 
  3. Class Back_up_databaseextendsdbstuff{ 
  4. //類開始 
  5. var $HOST
  6. var $USERNAME
  7. var $PASSWORD
  8. var $DATABASE
  9. function Back_up_database($host,$username,$password,$database){ 
  10. //初始化數據庫連接 
  11. $this->HOST=$host
  12. $this->USERNAME=$username
  13. $this->ASSWORD=$password
  14. $this->DATABASE=$database
  15. $Connection=$this->connect($this->HOST,$this->USERNAME,$this->ASSWORD,$this->DATABASE,$pconnect); 
  16. $this->Connection=$Connection
  17. //取得數據庫中的表 
  18. function get_table_name($database){ 
  19. $this->Connection; 
  20. $result=mysql_list_tables($database); 
  21. $i=0; 
  22. while($i<mysql_num_rows($result)){ 
  23. $tb_name[$i]=mysql_tablename($result,$i); 
  24. $table_name.=$tb_name[$i].","
  25. $i++; 
  26. $this->table_name=substr($table_name,0,-1); 
  27. return$this->table_name; 
  28. //取得每個表中的FIELDS和屬性并生成CREATETABLE語句 
  29. function get_table_fields($table_name){ 
  30. $this->Connection; 
  31. $createtable=dbstuff::query("SHOWCREATETABLE$table_name"); 
  32. $create=dbstuff::fetch_row($createtable); 
  33. $tabledump.="DROPTABLEIFEXISTS$table_name;/n"
  34. $tabledump.=$create[1].";/n/n"
  35. $this->$table_name=$tabledump
  36. return$this->$table_name
  37. //取得表中的數據并生成ISERTINTO語句 
  38. function get_insert($table_insert_name){ 
  39. $this->Connection; 
  40. $rows=dbstuff::query("SELECT*FROM$table_insert_name"); 
  41. $numfields=dbstuff::num_fields($rows); 
  42. $numrows=dbstuff::num_rows($rows); 
  43. while($row=dbstuff::fetch_row($rows)){ 
  44. $comma=""
  45. $tabledump.="INSERTINTO$table_insert_nameVALUES("
  46. for($i=0;$i<$numfields;$i++){ 
  47. $tabledump.=$comma."'".mysql_escape_string($row[$i])."'"
  48. $comma=","
  49. $tabledump.=");/n"
  50. $this->tabledump=$tabledump
  51. return$this->tabledump; 
  52. //獲取所有數據并連接成新的字符串并將它寫入文件中.sql 
  53. function get_string($database_name,$file_path_name){ 
  54. $time=date("Y-m-dH:j"); 
  55. $date_time=date("YmdHis"); 
  56. $file_path_name=$file_path_name.$date_time.".sql"
  57. $version="Antsent_Web_StudioDatabaseBackUpV1.01"
  58. $idstring='#Identify:'.base64_encode("$time,$version")."/n"
  59. $head_info="$idstring"
  60. "#/n"
  61. "#Antsnet_Web!TheBasicClassOfBackUpDataBase/n"
  62. "#Version:AntsnetWeb!$version/n"
  63. "#Timetime/n"
  64. "#Type:ClassOfBackUpDataBase/n"
  65. "#Antsnet_Web_Studio!Home:http://www.111cn.net /n"
  66. "#PleasevisitourwebsitefornewestinfomationaboutAntsnet_Web_Studio!/n"
  67. "#--------------------------------------------------------/n/n/n"
  68. $table_name=$this->get_table_name($database_name); 
  69. $array_table=explode(",",$table_name); 
  70. for($i=0;$i<count($array_table);$i++){ 
  71. $table_string.=$this->get_table_fields($array_table[$i]); 
  72. $table_insert.=$this->get_insert($array_table[$i]); 
  73. $count_string=$head_info.$table_string.$table_insert
  74. //return$count_string; 
  75. $write_status=$this->write_file($file_path_name,$count_string); 
  76. return$write_status;//開源代碼Vevb.com 
  77. //寫入一個文件 
  78. function write_file($file_path,$file_contents){ 
  79. if(@!$fp=fopen($file_path,'w')){ 
  80. $status="<fontcolor=/"red/">ThisFileCouldNotOpenOrRead.</font>"
  81. }else
  82. flock($fp,3); 
  83. fwrite($fp,$file_contents); 
  84. fclose($fp); 
  85. window.google_render_ad(); 
  86. ?>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汶上县| 五大连池市| 衡水市| 苍梧县| 天镇县| 蛟河市| 柳江县| 和硕县| 肇州县| 历史| 博乐市| 滨州市| 大厂| 桂阳县| 建平县| 临湘市| 叶城县| 托克托县| 米易县| 阿克| 钟祥市| 临沧市| 昭平县| 府谷县| 同仁县| 洛川县| 永靖县| 海口市| 巴塘县| 茌平县| 化隆| 南溪县| 涟水县| 陈巴尔虎旗| 汕头市| 霞浦县| 璧山县| 浦北县| 太仓市| 稷山县| 健康|