>백엔드 개발 >PHP 튜토리얼 >PHP는 전체 MySQL 데이터베이스를 백업하거나 테이블을 지정합니다.

PHP는 전체 MySQL 데이터베이스를 백업하거나 테이블을 지정합니다.

WBOY
WBOY원래의
2016-07-25 08:45:17951검색

php 클래스는 데이터베이스를 완전히 백업하거나 데이터베이스의 지정된 테이블을 백업하는 기능을 구현합니다.

  1. class Backup
  2. {
  3. /**
  4. * @var 儲存選項
  5. */
  6. var $config;
  7. * @var 儲存最終的 sql 轉儲
  8. */
  9. var $config;
  10. / * *
  11. * @var 儲存每個表格的表格結構插入
  12. */
  13. var $dump;
  14. /**
  15. * @var zip 檔名
  16. */
  17. var $struktur = array();
  18. /**
  19. * 這個函數是建構子和片語選項
  20. * 並連接到資料庫
  21. * @return
  22. */
  23. var $datei;
  24. /**
  25. * 此函數啟動備份進度,是核心功能
  26. * @return
  27. */
  28. public function Backup($options)
  29. {
  30. // 寫入選項
  31. foreach( $options AS $name => $value)
  32. {
  33. $this->config[$name] = $value;
  34. }
  35. // 檢查mysql 連線
  36. mysql_connect( $this->config['mysql'][0], $this->config['mysql'][1], $this->config['mysql'][2]) 或die( mysql_error());
  37. mysql_select_db($this->config['mysql'][3]) 或die(mysql_error());
  38. }
  39. /**開始備份** /
  40. public function backupDB()
  41. {
  42. // 開始備份
  43. if(isset($_POST['backup']))
  44. {
  45. // 檢查表是否被選取
  46. if(empty ($_POST['table']))
  47. {
  48. die("請選一張桌子。");
  49. }
  50. /** */
  51. $tables = array();
  52. $insert = array();
  53. $sql_statement = '';
  54. // 鎖定表
  55. foreach($_POST[' table'] AS $ table)
  56. {
  57. mysql_query("LOCK TABLE $table WRITE");
  58. // 讀取表結構
  59. $res = mysql_query('SHOW CREATE TABLE '. $table.' ');
  60. $createtable = mysql_result($res, 0, 1);
  61. $str = "nn".$createtable."nn";
  62. array_push($tables , $str) ;
  63. // 讀取表格「inserts」
  64. $sql = 'SELECT * FROM '.$table;
  65. $query = mysql_query($sql) or die(mysql_error() );
  66. $feld_anzahl = mysql_num_fields($query);
  67. $sql_statement = '--
  68. --資料表`$table`
  69. --
  70. '
  71. '
  72. '
  73. '
  74. '
  75. '
  76. '
  77. '
  78. '
  79. '
  80. '
  81. '
  82. '
  83. // 開始讀取進度
  84. while($ds = mysql_fetch_object($query)){
  85. $sql_statement .= 'INSERT INTO `'.$table.'` (';
  86. for ($i = 0;$i if ($i ==$feld_anzahl-1){
  87. $sql_statement .= mysql_field_name($query,$i );
  88. } else {
  89. $sql_statement .= mysql_field_name($query,$i).', ';
  90. }
  91. }
  92. $sql_statement .= ') VALUES (; 🎜> for ($i = 0;$i $name = mysql_field_name($query,$i); if (empty($ds) ->$ name)){ $ds->$name = 'NULL'; } if ($i ==$feld_anzahl-1){ $sql_statement .= ' "'.$ds ->$name.'"'; } else { $sql_statement .= '"'.$ds->$name.'", '; } }
  93. $sql_statement .= ");n";
  94. }
  95. // 존재하지 않는 경우 "Inserts"를 배열에 삽입
  96. if(!in_array($sql_statement, $insert))
  97. {
  98. array_push($insert, $sql_statement);
  99. unset($sql_statement);
  100. }
  101. unset($sql_statement);
  102. }
  103. // 테이블 구조와 삽입을 하나의 var
  104. $this->struktur = array_combine($tables, $insert);
  105. // 전체 덤프 생성
  106. $this ->createDUMP($this->struktur);
  107. // zip 파일 생성
  108. $this->createZIP();
  109. /**백업 종료 **/
  110. // SQL 덤프와 함께 이메일 보내기
  111. if(isset($this->config['email']) && !empty($this->config['email']) )
  112. {
  113. $this->sendEmail();
  114. }
  115. // 출력
  116. echo '

    백업 전쟁 erfolgreich

    백업 다운로드


  117. ';
  118. }
  119. }
  120. /**
  121. * 이 기능은 첨부 파일이 포함된 이메일을 생성합니다
  122. * @return
  123. */
  124. 보호 함수 sendEmail()
  125. {
  126. // 이메일 보내기 시작
  127. foreach($this->config['email'] AS $email)
  128. {
  129. $to = $email;
  130. $from = $this->config['email'][0];
  131. $message_body = "이 이메일에는 데이터베이스 백업이 zip 파일로 포함되어 있습니다.";
  132. $msep = strtoupper (md5 (uniqid (time ())));
  133. // 이메일 헤더 설정(텍스트만) )
  134. $header =
  135. "From: $fromrn" .
  136. "MIME-Version: 1.0rn" .
  137. "Content-Type: multipart/mixed;boundary="$msep"rnrn" .
  138. "--$mseprn" .
  139. "콘텐츠 유형: text/plainrn" .
  140. "콘텐츠 전송 인코딩: 8bitrnrn" .
  141. $message_body . "rn";
  142. // 파일 이름
  143. $dateiname = $this->datei;
  144. // zip 파일의 파일 크기 가져오기
  145. $dateigroesse = filesize ($dateiname );
  146. // 읽을 파일 열기
  147. $f = fopen ($dateiname, "r");
  148. // 내용 저장
  149. $attached_file = fread ($f, $dateigroesse );
  150. // 파일 닫기
  151. fclose ($f);
  152. // 첨부 파일 생성
  153. $attachment = Chunk_split (base64_encode ($attached_file));
  154. / / 첨부 헤더 설정
  155. $header .=
  156. "--" . $msep . "rn" .
  157. "콘텐츠 유형: application/zip; name='Backup'rn" .
  158. "콘텐츠 전송 인코딩: base64rn" .
  159. "콘텐츠 처리: 첨부; 파일 이름=' Backup.zip'rn" .
  160. "내용 설명: Mysql Datenbank Backup im Anhangrnrn" .
  161. $attachment . "rn";
  162. // 첨부 파일 끝 표시
  163. $header .= "--$msep--";
  164. // 이메일 제목
  165. $subject = "데이터베이스 Backup";
  166. // 이메일로 이메일 보내기^^
  167. if(mail($to, $subject, '', $header) == FALSE)
  168. {
  169. die(" 이메일을 보낼 수 없습니다.");
  170. }
  171. echo "

    이메일이 성공적으로 전송되었습니다. }

  172. }
  173. /**
  174. * 이 함수는 데이터베이스 덤프가 포함된 zip 파일을 생성하고 이를 FTP 서버에 저장합니다
  175. * @return
  176. */
  177. protected function createZIP()
  178. {
  179. // 권한을 777로 설정
  180. chmod($this->config[ 'folder'], 0777);
  181. // zip 파일 생성
  182. $zip = new ZipArchive();
  183. // 파일 이름 생성
  184. $this->datei = $this ->config['folder'].$this->config['mysql'][3]."_".date("j_F_Y_g:i_a").".zip";
  185. / / 파일 생성 가능 여부 확인
  186. if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {
  187. exit("cannot open <".$ this->datei.">n");
  188. }
  189. // zip 파일에 mysql 덤프 추가
  190. $zip->addFromString("dump.sql", $this- >dump);
  191. // 파일 닫기
  192. $zip->close();
  193. // 파일 생성 여부 확인
  194. if(!file_exists($this-> ;datei))
  195. {
  196. die("ZIP 파일을 생성할 수 없습니다.");
  197. }
  198. echo "

    zip이 생성되었습니다.

    ";
  199. }
  200. /**
  201. * 이 함수는 전체 SQL 덤프를 생성합니다
  202. * @param object $dump
  203. * @return
  204. */
  205. 보호 함수 createDUMP($dump)
  206. {
  207. $date = date("F j, Y, g:i a");
  208. $header = <<-- SQL Dump
  209. --
  210. -- 호스트: { $_SERVER['HTTP_HOST']}
  211. -- Erstellungszeit: {$date}
  212. --
  213. -- Datenbank: `{$this->config['mysql'][3] }`
  214. --
  215. -- ---------------------- --------
  216. HEADER;
  217. foreach($dump AS $name => $value)
  218. {
  219. $sql .= $name.$value;
  220. }
  221. $this->dump = $header.$sql;
  222. }
  223. /**
  224. * 이 함수는 테이블을 선택하기 위한 출력 형식을 표시합니다
  225. * @return
  226. */
  227. public function outputForm()
  228. {
  229. // 데이터베이스에서 모든 테이블 선택
  230. $result = mysql_list_tables($this->config['mysql'][ 3]);
  231. $buffer = '
  232. 일부 테이블 선택


  233. < ;/form>
  234. ';
  235. echo $buffer;
  236. }
  237. }
  238. ?>
复system代码

사용 방법:
  1. //이메일 주소를 원하는 만큼 추가할 수 있습니다
  2. $options = array('email' => ; array('email1', 'email2'),
  3. '폴더' => './backup/',
  4. 'mysql' => array('localhost', 'root', '** **', 'database'));
  5. $b = new Backup($options);
  6. // 양식을 제출하면 백업 시작
  7. if(isset($_POST[' backup']))
  8. {
  9. // 백업 시작
  10. $b->backupDB();
  11. }
  12. // 테이블 표시
  13. $b-> outputForm();
  14. ?>
复제대码

PHP, MySQL


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.