error_reporting(0);//悪意のある PHP アラーム プロンプトをすべて排除します
//メールアドレスを設定します
$options = array('email' => array('email1', 'email2'),
'フォルダー' => './backup/',
'mysql' => array('localhost', 'user', 'password', 'db'));
$b = 新しいバックアップ($options) ;
//バックアップコマンドを送信します
if(isset($_POST['backup']))
{
// バックアップを開始します
$b->バックアップDB();
}
//バックアップテーブルを表示
$b->outputForm();
?>
具体的なクラスの実装:
コードは次のとおりです |
コードをコピー |
クラスのバックアップ
{
/**
* @var は設定パラメータを保存するために使用されます */
変数 $config
/**
* @var は mysql ダンプ データを保存するために使用されます */
var $ダンプ
/**
* @var はデータベースの結果データと挿入命令に使用されます */
var $struktur = 配列();
/**
* @var 圧縮ファイル名 zip */
var $date
/**
* 構造機能
* データベースに接続します
* @return */
パブリック関数 Backup($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(空($_POST['テーブル']))
{
die("データテーブルを選択してください。");
}
/**バックアップの開始 **/
$tables = 配列();
$挿入 = 配列();
$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 = '--
-- データテーブル `$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);
} その他 {
$sql_statement .= mysql_field_name($query,$i).', ';
}
}
$sql_statement .= ') 値 (';
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.'"'
} その他 {
$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();
}
// 出力
echo ' バックアップが完了しましたバックアップをダウンロード
;
}
}
/**
*メール送信機能
* @return */
保護された関数 sendEmail()
{
// メールアドレスを読み取る
foreach($this->config['email'] AS $email) {
$to = $メール
$from = $this->config['メール'][0];
$message_body = "このメールに含まれる zip パッケージはデータベースのバックアップです";
$msep = strtoupper (md5 (uniqid (time ())));
//メールヘッダーを設定します
$ヘッダー =
「差出人: $fromrn」
「MIME バージョン: 1.0rn」
"Content-Type: multipart/mixed; border=".$msep."rnrn"
"--$mseprn"
「コンテンツタイプ: text/plainrn」
「コンテンツ転送エンコーディング: 8bitrnrn」
$message_body ;
// ファイル名
$dateiname = $this->datei
// 圧縮されたパッケージのサイズ
$dateigroesse = ファイルサイズ ($dateiname);
// 圧縮パッケージを読み取る
$f = fopen ($dateiname, "r");
// 添付ファイルに保存
$attached_file = fread ($f, $dateigroesse);
// 圧縮パッケージを閉じます
fclose ($f);
// 添付ファイルを作成します
$attachment = chunk_split (base64_encode ($attached_file));
//添付ヘッダーを設定します
$header .=
"--" . $msep
"Content-Type: application/zip; name='Backup'rn"
「コンテンツ転送エンコーディング:base64rn」
"Content-Disposition: 添付ファイル; filename='Backup.zip'rn"
「コンテンツの説明: Mysql Datenbank Backup im Anhangrnrn」
$添付ファイル
// 添付ファイルの終了が不明であることをマークします
$header .= "--$msep--";
// メールのタイトル
$subject = "データベースのバックアップ";
// メールを送信するには、PHP サポートを有効にする必要があります ^^
if(mail($to, $subject, '', $header) == FALSE)
{
die("メールを送信できません。メールアドレスを確認してください");
}
echo "メールは正常に送信されました ";
}
}
/**
* データベースバックアップの圧縮パッケージを作成し、サーバー上の指定されたディレクトリに保存します
* @return */
保護された関数 createZIP()
{
// フォルダーのアクセス許可が十分である必要があります
chmod($this->config['フォルダ'], );
//圧縮パッケージを作成します
$zip = 新しい 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("<".$this->datei.">n" を開けません);
}
//ダンプしたデータを圧縮パッケージに入れます
$zip->addFromString("dump.sql", $this->dump);
// 圧縮パッケージを閉じます
$zip->close();
// 圧縮パッケージが生成されたかどうかを確認します
if(!file_exists($this->datei))
{
die("圧縮パッケージを生成できません");
}
echo "データベースバックアップ圧縮パッケージが正常に生成されました ";
}
/**
* mysqlダンプ関数数
* @param オブジェクト $dump
* @return */
保護された関数 createDUMP($dump)
{
$date = date("F j, Y, g:i a");
$header = <<<ヘッダー
-- SQL ダンプ
--
-- ホスト: {$_SERVER['HTTP_HOST']}
-- エルシュテルングツァイト: {$date}
--
-- データバンク: `{$this->config['mysql'][3]}`
--
-------------------------------------------------- --------
ヘッダー
foreach($dump AS $name => $value)
{
$sql .= $name.$value
}
$this->ダンプ = $header.$sql;
}
/**
* データテーブルを選択するためのインターフェース関数を生成
* @return */
パブリック関数outputForm()
{
// すべて選択
$result = mysql_list_tables($this->config['mysql'][3]);
$buffer = '
<フィールドセット>
<フォームメソッド="ポスト" アクション="">
フォーム>
フィールドセット>';
エコー $バッファ
}
}
?>
| 一般的なデータベースバックアップクラス
コードは次のとおりです
コードをコピー
|
|
/*データベースバックアップ: 注意: このタイプが正しく動作するには、データベース接続を追加する必要があります*/
クラス Back_up_databaseextendsdbstuff{
//授業が始まります
var $HOST;
var $USERNAME;
var $パスワード;
var $DATABASE;
関数 Back_up_database($host,$username,$password,$database){
//データベース接続を初期化します
$this->HOST=$host;
$this->USERNAME=$ユーザー名;
$this->ASSWORD=$パスワード;
$this->DATABASE=$database;
$Connection=$this->connect($this->HOST,$this->USERNAME,$this->ASSWORD,$this->DATABASE,$pconnect);
$this->Connection=$Connection;
}
//データベース内のテーブルを取得します
関数 get_table_name($database){
$this->接続;
$result=mysql_list_tables($database);
$i=0;
while($i
$tb_name[$i]=mysql_tablename($result,$i);
$table_name.=$tb_name[$i].",";
$i++;
}
$this->table_name=substr($table_name,0,-1);
return$this->テーブル名;
}
//各テーブルの FIELDS と属性を取得し、CREATETABLE ステートメントを生成します
関数 get_table_fields($table_name){
$this->接続;
$createtable=dbstuff::query("SHOWCREATETABLE$table_name");
$create=dbstuff::fetch_row($createtable);
$tabledump.="DROPTABLEIFEXISTS$table_name;n";
$tabledump.=$create[1].";nn";
$this->$table_name=$tabledump;
return$this->$table_name;
}
//テーブル内のデータを取得し、ISERINTO ステートメントを生成します
関数 get_insert($table_insert_name){
$this->接続;
$rows=dbstuff::query("SELECT*FROM$table_insert_name");
$numfields=dbstuff::num_fields($rows);
$numrows=dbstuff::num_rows($rows);
while($row=dbstuff::fetch_row($rows)){
$comma="";
$tabledump.="INSERTINTO$table_insert_nameVALUES(";
for($i=0;$i
$tabledump.=$comma."'".mysql_escape_string($row[$i])."'";
$comma=",";
}
$tabledump.=");n";
}
$this->tabledump=$tabledump;
return$this->tabledump;
}
//すべてのデータを取得して新しい文字列に連結し、file.sql に書き込みます
関数 get_string($データベース名,$ファイルパス名){
$time=date("Y-m-dH:j");
$date_time=date("YmdHis");
$file_path_name=$file_path_name.$date_time.".sql";
$version="Antsent_Web_StudioDatabaseBackUpV1.01";
$idstring='#Identify:'.base64_encode("$time,$version")."n";
$head_info="$idstring".
「#n」
"#Antsnet_Web!TheBasicClassOfBackUpDataBasen".
"#Version:AntsnetWeb!$versionn".
「#タイムタイム」
"#Type:ClassOfBackUpDataBasen".
「#Antsnet_Web_Studio!ホーム:http://www.bKjia.c0m n」。
「#Antsnet_Web_Studio に関する最新情報については、ウェブサイトをご覧ください!n」。
「#------------------------------------------------ --------んん」;
$table_name=$this->get_table_name($database_name);
$array_table=explode(",",$table_name);
for($i=0;$i
$table_string.=$this->get_table_fields($array_table[$i]);
$table_insert.=$this->get_insert($array_table[$i]);
}
$count_string=$head_info.$table_string.$table_insert;
//return$count_string;
$write_status=$this->write_file($file_path_name,$count_string);
return$write_status;
}
// ファイルに書き込みます
関数 write_file($file_path,$file_contents){
if(@!$fp=fopen($file_path,'w')){
$status="ThisFileCouldNotOpenOrRead.";
}その他{
群れ($fp,3);
fwrite($fp,$file_contents);
fclose($fp);
window.google_render_ad();
?>
|
http://www.bkjia.com/PHPjc/630701.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630701.html技術記事 Xiaosheng は今日 2 つの PHP データベース バックアップ プログラムを収集しました。ここで実行できる機能は、1. 指定されたデータ テーブルをバックアップする、2. それを zip ファイルにパッケージ化する、3. 指定された電子メール アドレスに送信する、です。これは...
|