-
- error_reporting(0);//悪意のあるphpアラームプロンプトをすべて排除します
- //メールアドレスを設定します
- $options = array('email' => array('email1', 'email2' ),
- 'folder' => './backup/',
- 'mysql' => array('localhost', 'user', 'password', 'db'));
-
- $b = 新しいバックアップ($options);
-
- // バックアップコマンドを送信
- if(isset($_POST['backup']))
- {
- // バックアップを開始
- $b->backupDB();
- }
- // バックアップを表示テーブル
- $b->outputForm();
- ?>
コードをコピー
PHPデータベースバックアップクラスの実装コード:
-
- /**
- * mysql データベースをバックアップします
- * 編集: bbs.it-home.org
- */
- class Backup
- {
- /**
- * @var は構成パラメータを保存するために使用されます
- */
- var $config;
-
- /**
- * @varはmysqlダンプのデータを保存するために使用されます
- */
- var $ dump;
-
- /**
- * @var はデータベースの結果データと挿入命令に使用されます
- */
- var $struktur = array();
-
- /**
- * @var 圧縮ファイル名 zip
- */
- var $datei;
-
- /**
- * 構造関数
- * データベースに接続
- * @return
- */
- public function バックアップ($options)
- {
- //仮パラメータから設定を読み取ります
- foreach($options AS $name => $value)
- {
- $this->config[$name] = $value;
- }
-
- / / データベースに接続します
- 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());
- }
-
- /**
- * バックアップデータベース処理を実行する関数
- * @return
- */
- パブリック関数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) ;
-
- // データテーブル内のすべてのデータ行をクエリします
- $sql = 'SELECT * FROM '.$table;
- $query = mysql_query($sql) または die(mysql_error());
- $feld_anzahl = mysql_num_fields($ query);
-
- $sql_statement = '--
- -- Data Table `$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";
- }
-
- //データを挿入 配列に入れて重複を削除します
- if(!in_array($sql_statement, $insert))
- {
- array_push($insert, $sql_statement);
- unset($sql_statement);
- }
-
- unset($sql_statement) );
-
- }
-
- // データベース構造と挿入コマンドをまとめます
- $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();
- }
-
- //output
- echo '
バックアップが完了しましたバックアップをダウンロード
';
- }
- }
-
- /**
- * メール送信機能
- * @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; border=".$msep."rnrn" .
- "--$mseprn"
- "Content-Type: text/plainrn" .
- "Content-Transfer-Encoding: 8bitrnrn" .
- $message_body . "rn";
-
- // ファイル名
- $dateiname = $this->datei;
-
- / /圧縮パッケージのサイズ
- $dateigroesse = filesize ($dateiname);
-
- // 圧縮パッケージを読み取る
- $f = fopen ($dateiname, "r");
- // 添付ファイルに保存
- $attached_file = fread ($f , $ dateigroesse);
- // 圧縮パッケージを閉じる
- fclose ($f);
- // 添付ファイルを作成する
- $attachment = chunk_split (base64_encode ($attached_file))
-
- // 添付ファイルのヘッダーを設定する
- $header .=
- "--" . $msep . "rn" .
- "Content-Type: application/zip; name='Backup'rn" .
- "Content-Transfer-Encoding:base64rn" .
- "Content-Disposition:attachment; filename ='Backup.zip'rn" .
- "Content-Description: Mysql Datenbank Backup im Anhangrnrn" .
- $attachment . "rn";
-
- // 添付ファイルの末尾を不明としてマークします
- $header .= "--$msep-- ";
-
- // メールのタイトル
- $subject = "データベース バックアップ";
-
- // メールを送信するには、PHP サポートを有効にする必要があります ^^
- if(mail($to, $subject, '', $header) == FALSE)
- {
- die("メールを送信できません。メールアドレスを確認してください");
- }
-
- echo "
メールは正常に送信されました ";
- }
- }
-
- /**
- * データベースバックアップの圧縮パッケージを作成し、サーバー上の指定されたディレクトリに保存します
- * @return
- */
- protected function createZIP()
- {
-
- // フォルダーのアクセス許可が十分である必要があります
- chmod($this->config['folder'], 0777);
-
- // Create圧縮パッケージ
- $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->addFromString("dump.sql", $this->dump);
- // 圧縮パッケージを閉じる
- $zip->close();
-
- // 圧縮パッケージが生成されたか確認する
- if(!file_exists($this->datei))
- {
- die("圧縮パッケージを生成できません");
- }
-
- echo "
データベース バックアップの圧縮パッケージが正常に生成されました";
- }
-
- /**
- * mysql ダンプ関数
- * @param object $dump
- * @return
- */
- 保護関数 createDUMP($dump)
- {
- $date = date("F j, Y, g:i a");
-
- $header = <<
コードをコピー
|