ホームページ > バックエンド開発 > PHPチュートリアル > 2 つの PHP データベース バックアップ プログラム コード_PHP チュートリアル

2 つの PHP データベース バックアップ プログラム コード_PHP チュートリアル

WBOY
リリース: 2016-07-13 17:06:12
オリジナル
1221 人が閲覧しました

Xiaosheng は今日 2 つの PHP データベース バックアップ プログラムを収集しました。ここで実行できる機能は次のとおりです: 1. 指定されたデータ テーブルをバックアップする、2. zip ファイルにパッケージ化する、3. 指定された電子メール アドレスに送信する、これがすべての基本的な機能です。

使用方法は以下をご覧ください:

コードは次のとおりです コードをコピー

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();
?>


www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/630701.html技術記事 Xiaosheng は今日 2 つの PHP データベース バックアップ プログラムを収集しました。ここで実行できる機能は、1. 指定されたデータ テーブルをバックアップする、2. それを zip ファイルにパッケージ化する、3. 指定された電子メール アドレスに送信する、です。これは...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート