php 클래스는 데이터베이스를 완전히 백업하거나 데이터베이스의 지정된 테이블을 백업하는 기능을 구현합니다.
-
class Backup
- {
- /**
- * @var 儲存選項
- */
- var $config;
-
- * @var 儲存最終的 sql 轉儲
- */
- var $config;
-
- / * *
- * @var 儲存每個表格的表格結構插入
- */
- var $dump;
-
- /**
- * @var zip 檔名
- */
- var $struktur = array();
-
- /**
- * 這個函數是建構子和片語選項
- * 並連接到資料庫
- * @return
- */
- var $datei;
-
- /**
- * 此函數啟動備份進度,是核心功能
- * @return
- */
- public function Backup($options)
- {
- // 寫入選項
- foreach( $options AS $name => $value)
- {
- $this->config[$name] = $value;
- }
-
- // 檢查mysql 連線
- mysql_connect( $this->config['mysql'][0], $this->config['mysql'][1], $this->config['mysql'][2]) 或die( mysql_error());
- mysql_select_db($this->config['mysql'][3]) 或die(mysql_error());
- }
-
- /**開始備份** /
- public function backupDB()
- {
- // 開始備份
- if(isset($_POST['backup']))
- {
- // 檢查表是否被選取
- if(empty ($_POST['table']))
- {
- die("請選一張桌子。");
- }
-
- /** */
- $tables = array();
- $insert = array();
- $sql_statement = '';
-
- // 鎖定表
- foreach($_POST[' table'] AS $ table)
- {
- mysql_query("LOCK TABLE $table WRITE");
-
- // 讀取表結構
- $res = mysql_query('SHOW CREATE TABLE '. $table.' ');
- $createtable = mysql_result($res, 0, 1);
- $str = "nn".$createtable."nn";
-
- array_push($tables , $str) ;
-
- // 讀取表格「inserts」
- $sql = 'SELECT * FROM '.$table;
- $query = mysql_query($sql) or die(mysql_error() );
- $feld_anzahl = mysql_num_fields($query);
-
- $sql_statement = '--
- --資料表`$table`
- --
-
- '
- '
- '
- '
- '
- '
- '
- '
- '
- '
- '
- '
- '
- // 開始讀取進度
- while($ds = mysql_fetch_object($query)){
- $sql_statement .= 'INSERT INTO `'.$table.'` (';
-
- for ($i = 0;$i if ($i ==$feld_anzahl-1){
- $sql_statement .= mysql_field_name($query,$i );
- } else {
- $sql_statement .= mysql_field_name($query,$i).', ';
- }
- }
- $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.'", '; } }
- $sql_statement .= ");n";
- }
-
- // 존재하지 않는 경우 "Inserts"를 배열에 삽입
- if(!in_array($sql_statement, $insert))
- {
- array_push($insert, $sql_statement);
- unset($sql_statement);
- }
-
- unset($sql_statement);
-
- }
-
- // 테이블 구조와 삽입을 하나의 var
- $this->struktur = array_combine($tables, $insert);
-
- // 전체 덤프 생성
- $this ->createDUMP($this->struktur);
-
- // zip 파일 생성
- $this->createZIP();
-
- /**백업 종료 **/
-
- // SQL 덤프와 함께 이메일 보내기
- if(isset($this->config['email']) && !empty($this->config['email']) )
- {
- $this->sendEmail();
- }
-
- // 출력
- echo '
백업 전쟁 erfolgreich백업 다운로드
-
-
';
- }
- }
-
- /**
- * 이 기능은 첨부 파일이 포함된 이메일을 생성합니다
- * @return
- */
- 보호 함수 sendEmail()
- {
- // 이메일 보내기 시작
- foreach($this->config['email'] AS $email)
- {
- $to = $email;
-
- $from = $this->config['email'][0];
-
- $message_body = "이 이메일에는 데이터베이스 백업이 zip 파일로 포함되어 있습니다.";
-
- $msep = strtoupper (md5 (uniqid (time ())));
-
- // 이메일 헤더 설정(텍스트만) )
- $header =
- "From: $fromrn" .
- "MIME-Version: 1.0rn" .
- "Content-Type: multipart/mixed;boundary="$msep"rnrn" .
- "--$mseprn" .
- "콘텐츠 유형: text/plainrn" .
- "콘텐츠 전송 인코딩: 8bitrnrn" .
- $message_body . "rn";
-
- // 파일 이름
- $dateiname = $this->datei;
-
- // zip 파일의 파일 크기 가져오기
- $dateigroesse = filesize ($dateiname );
-
- // 읽을 파일 열기
- $f = fopen ($dateiname, "r");
- // 내용 저장
- $attached_file = fread ($f, $dateigroesse );
- // 파일 닫기
- fclose ($f);
-
- // 첨부 파일 생성
- $attachment = Chunk_split (base64_encode ($attached_file));
-
- / / 첨부 헤더 설정
- $header .=
- "--" . $msep . "rn" .
- "콘텐츠 유형: application/zip; name='Backup'rn" .
- "콘텐츠 전송 인코딩: base64rn" .
- "콘텐츠 처리: 첨부; 파일 이름=' Backup.zip'rn" .
- "내용 설명: Mysql Datenbank Backup im Anhangrnrn" .
- $attachment . "rn";
-
- // 첨부 파일 끝 표시
- $header .= "--$msep--";
-
- // 이메일 제목
- $subject = "데이터베이스 Backup";
-
- // 이메일로 이메일 보내기^^
- if(mail($to, $subject, '', $header) == FALSE)
- {
- die(" 이메일을 보낼 수 없습니다.");
- }
-
- echo "
이메일이 성공적으로 전송되었습니다. } - }
- /**
- * 이 함수는 데이터베이스 덤프가 포함된 zip 파일을 생성하고 이를 FTP 서버에 저장합니다
- * @return
- */
- protected function createZIP()
- {
- // 권한을 777로 설정
- chmod($this->config[ 'folder'], 0777);
-
- // zip 파일 생성
- $zip = new ZipArchive();
- // 파일 이름 생성
- $this->datei = $this ->config['folder'].$this->config['mysql'][3]."_".date("j_F_Y_g:i_a").".zip";
-
- / / 파일 생성 가능 여부 확인
- if ($zip->open($this->datei, ZIPARCHIVE::CREATE)!==TRUE) {
- exit("cannot open <".$ this->datei.">n");
- }
-
- // zip 파일에 mysql 덤프 추가
- $zip->addFromString("dump.sql", $this- >dump);
- // 파일 닫기
- $zip->close();
-
- // 파일 생성 여부 확인
- if(!file_exists($this-> ;datei))
- {
- die("ZIP 파일을 생성할 수 없습니다.");
- }
-
- echo "
zip이 생성되었습니다. ";
- }
-
- /**
- * 이 함수는 전체 SQL 덤프를 생성합니다
- * @param object $dump
- * @return
- */
- 보호 함수 createDUMP($dump)
- {
- $date = date("F j, Y, g:i a");
-
- $header = <<
复system代码
사용 방법:
-
- //이메일 주소를 원하는 만큼 추가할 수 있습니다
- $options = array('email' => ; array('email1', 'email2'),
- '폴더' => './backup/',
- 'mysql' => array('localhost', 'root', '** **', 'database'));
-
- $b = new Backup($options);
-
- // 양식을 제출하면 백업 시작
- if(isset($_POST[' backup']))
- {
- // 백업 시작
- $b->backupDB();
- }
-
- // 테이블 표시
- $b-> outputForm();
-
- ?>
复제대码
|