検索
ホームページバックエンド開発PHPチュートリアルmysql バックアップおよびリカバリ ボリューム処理を実装するための PHP メソッド、mysql volume_PHP チュートリアル

mysqlバックアップとボリューム処理の復元を実装するphpメソッド、mysqlボリューム

この記事の例では、PHP で mysql のバックアップとリカバリのボリューム処理を実装する方法を説明します。参考のためにみんなで共有してください。具体的な分析は次のとおりです:

ボリューム処理とは、処理したいデータを小さなファイルに分割して処理することです。ここでは、mysql データベースのボリュームバックアップを実現し、バックアップ用のテーブルを選択し、単一の SQL を実現するための PHP mysql バックアップおよび復元ボリューム処理クラスを紹介します。ファイルとボリュームの SQL インポート

各巻のインポートカテゴリとアイデアの詳細な説明

データベースのインポートとエクスポートはバックエンドに必要な機能です。ネットで検索するとデータベースのインポートとエクスポートについてたくさん見つかりますが、基本的には必要のないものがたくさん含まれている大規模なシステムです。他の人のものを自分のバックエンドに統合するのが好きではないので、私は自分のものをたくさん参照し、簡単に呼び出せるようにボリュームインポートクラスを書きました。どなたでもご参加いただけます。

ここでのボリューム ファイルは、単一 SQL ファイルとボリューム SQL インポートを実装するために「_v1.sql」で終わります。ボリューム インポートの場合、現在のボリュームを残りのボリュームにインポートするかどうかを選択できます。完了するには、クラスを直接呼び出すだけです。

それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです

コードをコピーします コードは次のとおりです:
$db = new DataManage ( 'localhost', 'root', 'root', 'test', 'utf8' );

SQL ファイル、単一の SQL のみをインポートするかどうか (つまり、他のボリュームがある場合はインポートされません)。

コードをコピーします コードは次のとおりです:
$db->restore ( './backup/20120516211738_all_v1.sql', false );

バックアップ SQL ファイルを一覧表示する方法や SQL を選択する方法に相当しますが、これはこのカテゴリには含まれておらず、非常に簡単です。

現時点では、データベースのインポートのみが実装されています。具体的なアイデアと実装コードは次のとおりです。以下:

コードをコピーします コードは次のとおりです:
/**
* @著者やぬえ
* 注: ボリューム ファイルは _v1.sql で終わります
* 機能: 単一の SQL ファイルとボリュームの SQL インポートを実装します。ボリュームのインポートでは、現在のボリュームを残りのボリュームにインポートするかどうかを選択できます。 * 使用方法:
*
*
*------------------------------------------------ - -----------------
//それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです
$db = 新しい DataManage ( 'localhost', 'root', 'root', 'test', 'utf8' ); //SQL ファイル、単一の SQL のみをインポートするかどうか (つまり、他のボリュームがある場合はインポートされません)
$db->restore ( './backup/20120516211738_all_v1.sql', false ); *------------------------------------------------ - ------------------------
​*/
クラス DataManage {
var $db; // データベース接続
var $database; // 使用されるデータベース
var $sqldir; // データベースのバックアップ フォルダー

/**
  *初始化
  *
  * @param 文字列 $host
  * @param string $ユーザー名
  * @param string $password
  * @param 文字列 $database
  * @param 文字列 $charset
 */
function __construct($host = 'localhost', $username = 'root', $password = '', $database = 'test', $charset = 'utf8') {
$this->ホスト = $host; $this->ユーザー名 = $ユーザー名
$this->パスワード = $パスワード
$this->データベース = $データベース
$this->charset = $charset; // データベースに接続します
$this->db = mysql_connect ( $this->host, $this->username, $this->password ) または die ( "データベース接続に失敗しました。" ); //使用するデータベースを選択します
mysql_select_db ( $this->database, $this->db ) or die ( "データベースを開けません" ); // データベースのエンコード方法
mysql_query ( 'SET NAMES ' . $this->charset, $this->db ); }

/**
* バックアップデータをインポートします
* 説明: ボリューム ファイル形式 20120516211738_all_v1.sql
*
* @param 文字列 $sqlfile
* @param bool $single
​*/
関数リストア($sqlfile, $single = FALSE) {
// ファイルが存在するかどうかを確認します
if (! file_exists ( $sqlfile )) {
exit ( "ファイルが存在しません。確認してください" ); }
$this->ロック ( $this->データベース ); // データベースの保存場所を取得します
$sqlpath = パス情報 ($sqlfile); $this->sqldir = $sqlpath ['ディレクトリ名']; // サブボリュームが含まれているかどうかを確認し、20120516211738_all_v1.sql を _v から分離します。サブボリュームがある場合は、サブボリュームがあることを意味します
$volume = 爆発 ( "_v", $sqlfile ); $volume_path = $volume [0]; echo "プログラムが終了しないように、ブラウザを更新して閉じないでください。注意しないとデータベース構造が破損します
"; echo "バックアップ データをインポートしています。お待ちください!
"; if (emptyempty ( $volume [1] ) || $single) {
echo "sql:' をインポートしています。 // 分割はありません
If ($this->_import ( $sqlfile )) {
echo "データベースは正常にインポートされました!"; } その他 {
exit ('データベースのインポートに失敗しました!' ); }
} その他 {
// サブボリュームがある場合は、現在のサブボリュームを取得し、残りのサブボリュームをループで実行します
$volume_id = 爆発 ( ".sq", $volume [1] ); //現在のボリュームは $volume_id です
$volume_id = intval ( $volume_id [0] ); while ( $volume_id ) {
$tmpfile = $volume_path .$volume_id
// 他のボリュームが存在するため、実行を続行します
If (file_exists ( $tmpfile )) {
// インポートメソッドを実行します
echo "ボリューム $volume_id: '
'; If ($this->_import ( $tmpfile )) {

} その他 {
exit ( "ボリュームのインポート $volume_id: " . $tmpfile . '失敗! データベース構造が破損している可能性があります! ボリューム 1 のインポートから開始してください。 '); }
} その他 {
echo "このボリュームのバックアップはすべて正常にインポートされました!
"; 戻る
}
$volume_id ++; }
}
}

/**
* SQLをデータベースにインポートします(通常のインポート)
*
* @param 文字列 $sqlfile
* @return ブール値
​*/
プライベート関数 _import($sqlfile) {
$name = ベース名 ( $sqlfile ); $sqls = ファイル ( $sqlfile ); foreach ( $sqls as $sql ) {
str_replace ( "r", "", $sql ); str_replace ( "n", "", $sql ); if (! mysql_query ( トリム ( $sql ), $this->db ))
false を返します。 }
true を返します。 }

//データベース接続を閉じる
プライベート関数 close() {
mysql_close ( $this->db ); }

// バックアップまたはインポート中のエラーを避けるためにデータベースをロックします
プライベート関数 lock($tablename, $op = "WRITE") {
if (mysql_query ( "ロックテーブル " . $tablename . " " . $op ))
true を返します。 それ以外は
false を返します。 }

// ロックを解除します
プライベート関数unlock() {
if (mysql_query ( "テーブルのロックを解除" ))
true を返します。 それ以外は
false を返します。 }

// 破壊
関数 __destruct() {
mysql_query ( "テーブルのロックを解除", $this->db ); mysql_close ( $this->db ); }
}
?>

MySQL のバックアップと復元はボリュームで処理され、呼び出しが簡単です。


各巻の紹介アイデア:


SQL ファイルを 1 行ずつ読み取り、各行を完全な SQL ステートメントとして配列に保存し、ループして実行してデータベースに挿入します。 ただし、create table ステートメントは複数の行に分割する必要があります。かなり時間がかかりました。主にクラスファイルが占有されているためです。

アップデートの説明:


1. SQLインポート時にSQLファイル内のコメント「-」を削除することで、SQL内のシングルクォーテーションとダブルクォーテーションがインポートできない問題を解決します

2. 効率を向上させるために SQL ステートメントを配列に再結合し、配列から SQL を読み取ってインポートする必要を回避し、単一行を読み取った後に SQL を直接実行します。
ダウンロードアドレス: https://github.com/yanue/Dbmanage
エクスポートされた SQL ファイル形式は次のとおりです:

コードをコピーします

コードは次のとおりです:

-- -- MySQL データベース ダンプ

-- DBManage クラス、Power By yanue によって作成されました。 --

-- ホスト: ローカルホスト

-- 作成日: 2012 年 10 月 6 日 22:32

-- MySQL バージョン: 5.1.50-コミュニティ

-- PHP バージョン: 5.3.9-ZS5.6.0

--

-- データベース: `テスト`
--

-------------------------------------------------- ------- -- -- テーブル構造 aa
--

`aa` が存在する場合はテーブルを削除します
; テーブルを作成します `aa` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT、
`content` テキストが NULL ではありません、
主キー (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 デフォルト CHARSET=utf8;
--
-- テーブル aa のデータを転送します
--

INSERT INTO `aa` VALUES('1','

テストデータです笑> ;

');

以下はクラスコードです:



コードをコピーします

コードは次のとおりです:
/**
* @著者やぬえ
* @copyright Copyright (c) 2012 yanue.net
* @バージョン 1.1
※作成時期:2012年5月21日

更新日: 2012 年 10 月 6 日
更新手順: 1. SQL をインポートするときに SQL ファイル内のコメント「--」を削除することで、SQL 内の単一引用符と二重引用符がインポートできない問題が解決されます
2. 単一行を読み取った後、SQL を直接実行します。これにより、効率を向上させるために SQL ステートメントを配列に再結合し、配列から SQL を読み取ってインポートする必要がなくなります

* 注: ボリューム ファイルは _v1.sql (20120522021241_all_v1.sql) で終わります
* 機能: mysql データベースのボリュームバックアップを実現、バックアップ用のテーブルを選択、単一 SQL ファイルとボリューム SQL インポートを実現
* 使用方法:
*
* ------1. データベースのバックアップ(エクスポート) ---------------------------------- -- ------------------------
//それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです
$db = 新しい DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' ); // パラメータ: バックアップするテーブル (オプション)、バックアップ ディレクトリ (オプション、デフォルトはバックアップ)、ボリューム サイズ (オプション、デフォルトは 2000、つまり 2M)
$db->バックアップ (); * ------2. データベースのリカバリ(インポート) ---------------------------------- -- ------------------------
//それらは、ホスト、ユーザー名、パスワード、データベース名、データベースエンコーディングです
$db = 新しい DBManage ( 'localhost', 'root', 'root', 'test', 'utf8' ); //パラメータ: SQLファイル
$db->restore ('./backup/20120516211738_all_v1.sql'); *------------------------------------------------ - ------------------------
​*/
クラス DbManage {
var $db; // データベース接続
var $database; // 使用されるデータベース
var $sqldir; // データベースのバックアップ フォルダー
// 改行文字
プライベート $ds = "n"; // SQLを格納する変数
パブリック $sqlContent = ""; //各 SQL ステートメントの終了文字
パブリック $sqlEnd = ";";
/**
     *初始化
     *
     * @param 文字列 $host
     * @param string $ユーザー名
     * @param string $password
     * @param 文字列 $database
     * @param 文字列 $charset
    */
関数 __construct($host = 'localhost', $username = 'root', $password = '', $database = 'test', $charset = 'utf8') {
$this->host = $host; $this->ユーザー名 = $ユーザー名; $this->password = $password; $this->database = $database; $this->charset = $charset; set_time_limit(0);//時間制限なし
@ob_end_flush(); // データベースに接続します
$this->db = @mysql_connect ( $this->host, $this->username, $this->password ) または die( '

Mysql 接続エラー: '.mysql_error().'

'); //使用するデータベースを選択します
mysql_select_db ( $this->database, $this->db ) または die('

Mysql 接続エラー:' .mysql_error().'

'); // データベースのエンコード方法
mysql_query ( 'SET NAMES ' . $this->charset, $this->db );
}

/*
* * 新しいクエリデータベーステーブルを追加しました
*/
関数 getTables() {
$res = mysql_query ( "SHOW TABLES" ); $tables = 配列 (); while ( $row = mysql_fetch_array ( $res ) ) {
$tables [] = $row [0]; }
$tables を返します。 }

/*
*
*------------------------------------------データベースバックアップ開始---- -------------------------------------------------- ----
*/

/**
* データベースのバックアップ
* パラメーター: バックアップするテーブル (オプション)、バックアップ ディレクトリ (オプション、デフォルトはバックアップ)、ボリューム サイズ (オプション、デフォルトは 2000、つまり 2M)
*
* @param $string $dir
* @param int $size
* @param $string $テーブル名
​​*/
関数バックアップ($tablename = '', $dir, $size) {
$dir = $dir : './backup/'; //ディレクトリを作成します
if (! is_dir ( $dir )) {
mkdir ( $dir, 0777, true ) または die ( 'フォルダーの作成に失敗しました' ); }
$サイズ = $サイズ ? : 2048; $sql = ''; // 特定のテーブルのみをバックアップします
if (! emptyempty ( $tablename )) {
If(@mysql_num_rows(mysql_query("SHOW TABLES LIKE '".$tablename."'")) == 1) {
                                                                                                 $this->_showMsg('Table-' . $tablename .'-存在しません、確認してください!',true); 死ぬ();                                                                                $this->_showMsg('テーブル ' . $tablename.''); // ダンプ情報を挿入します
$sql = $this->_retrieve (); //テーブル構造情報を挿入
$sql .= $this->_insert_table_struct ( $tablename ); // データを挿入
$data = mysql_query ( "select * from " . $tablename ); // ファイル名の最初の部分
$filename = date ( 'YmdHis' )
。 // フィールドの数
$num_fields = mysql_num_fields ( $data );                                                                                                                                                                                           $p = 1; // 各レコードをループします
while ( $record = mysql_fetch_array ( $data ) ) {
// シングルレコード
$sql .= $this->_insert_record ( $tablename, $num_fields, $record ); // ボリュームサイズより大きい場合はファイルを書き込みます
If (strlen ( $sql ) >= $size * 1024) {
$file = $ファイル名 .$p
If ($this->_write_file ($sql, $file, $dir)) {
$this->_showMsg("Table-" . $tablename . "- Volume-" . $p . "-データのバックアップが完了しました、バックアップ ファイル[ " .$dir . $file ." ]");
} else {
$this->_showMsg("バックアップ テーブル -" . $tablename . "- 失敗しました",true); falseを返します。                                                                                                                                                                                                                                                        $p ++; // $ SQL 変数を空にリセットし、変数のサイズを再計算します
$sql = "";                                                                                                                                                                    // 時間内にデータをクリアします
unset($data,$record); // SQL のサイズだけではサイズをスコアリングするのに十分ではありません
if ($sql != "") {
$ファイル名 .= "_v" .sql; if ($this->_write_file ( $sql, $filename, $dir )) {
$this->_showMsg( "テーブル-" . $tablename . "-ボリューム-" . $p . "-データのバックアップが完了しました、バックアップ ファイル[ " .$dir . $filename ." ]");
} それ以外 { $this->_showMsg("バックアップ ボリューム-" . $p . "-失敗
"); false を返します。                                                                                                                                                                    $this->_showMsg("おめでとうございます! バックアップが成功しました"); } else {
$this->_showMsg('バックアップ中'); // すべてのテーブルをバックアップします
If ($tables = mysql_query ( "show table status from " . $this->database )) {
$ This-& gt; _Showmsg ("データベース構造の読み取りに成功しました!");                                                                                          $this->_showMsg("データベース構造の読み取りに失敗しました!"); 終了 (0);                                                                              // ダンプ情報を挿入します
$sql .= $this->_retrieve (); // ファイル名の最初の部分
$filename = date ( 'YmdHis' )
; // すべてのテーブルを検索します
$tables = mysql_query ( 'SHOW TABLES' );                                                                                                                                                                                           $p = 1; // すべてのテーブルをループします
while ( $table = mysql_fetch_array ( $tables ) ) {
                                                                                                                                                                            $tablename = $table [0];                                                                                                                                                                         $sql .= $this->_insert_table_struct ( $tablename ); $data = mysql_query ( "select * from " . $tablename ); $num_fields = mysql_num_fields ( $data );
// 各レコードをループします
while ( $record = mysql_fetch_array ( $data ) ) {
// シングルレコード
$sql .= $this->_insert_record ( $tablename, $num_fields, $record ); // ボリュームサイズより大きい場合はファイルを書き込みます
If (strlen ( $sql ) >= $size * 1000) {

$file = $ファイル名 .$p
// ファイルを書き込む 文 If ($this->_write_file ($sql, $file, $dir)) {
$this->_showMsg("-ボリューム-" . $p . "-データのバックアップが完了しました。バックアップ ファイル[".$dir.$ファイル。" ]");                                                                                                   $this->_showMsg("ボリューム-" . $p . "-バックアップに失敗しました!",true); falseを返します                                                                        // 次のサブロール个 $p ++; // $sql 変数を空にリセットし、変数のサイズを再計算します
$sql = "";                                                                                                                                                                                                                                                                    // SQL のサイズだけではサイズをスコアリングするのに十分ではありません
if ($sql != "") {
$ファイル名 .= "_v" .sql"; if ($this->_write_file ( $sql, $filename, $dir )) {
$this->_showMsg("-ボリューム-" . $p . "-データのバックアップが完了しました。バックアップ ファイル[".$dir.$ファイル名。" ]"); } それ以外 { $this->_showMsg("ボリューム-" . $p . "-バックアップに失敗しました",true); false を返します。                                                                                                                                                                      $this->_showMsg("おめでとうございます! バックアップが成功しました"); }
}

// 時間内に情報を出力します
プライベート関数 _showMsg($msg,$err=false){
$err = $err ? "エラー:" ; echo "

".$msg."

"; フラッシュ();
}

/**
* 基本的なデータベースのバックアップ情報を挿入します
*
* @return 文字列
​​*/
プライベート関数 _retrieve() {
$value = ''; $value .= '--'
$value .= '-- MySQL データベース ダンプ'
$value .= '-- DbManage クラス、Power By yanue によって作成されました ' 。 $value .= '-- http://yanue.net '
$value .= '--'
$value .= '-- ホスト: ' . $this->ds; $value .= '-- 日付: ' . date ( 'Y' ) . ' month ' . ' day' .私' ) $this->ds; $value .= '-- MySQL バージョン: ' . mysql_get_server_info ()
$value .= '-- PHP バージョン: ' . phpversion ()
$value .= $this->ds; $value .= '--'
$value .= '-- データベース: `' . $this->ds; $value .= '--' . $this->ds; $value .= '-------------------------------------------- -- ----------'; $value .= $this->ds . $this->ds;
$value を返します。 }

/**
* テーブル構造を挿入します
*
* @param 不明なタイプ $table
* @return 文字列
​​*/
プライベート関数 _insert_table_structor($table) {
$sql = ''; $sql .= "--" . $this->ds;$sql .= "--テーブル構造" .$this->ds; $sql .= "--" . $this->ds;
// テーブルが存在する場合は削除します
$sql .= "DROP TABLE IF EXISTS `" . $this->sqlEnd
// 詳細なテーブル情報を取得します
$res = mysql_query ( 'SHOW CREATE TABLE `' . $table . '`' ); $row = mysql_fetch_array ( $res ); $sql .= $row [1]; $sql .= $this->sqlEnd . //
を追加します $sql .= $this->ds; $sql .= "--" .$this->ds; $sql .= "-- テーブル内のデータを転送します " .this->ds; $sql .= "--" .$this->ds; $sql .= $this->ds; 戻り $sql; }

/**
* 単一レコードを挿入します
*
* @param string $table
* @param int $num_fields
* @param 配列 $record
* @return 文字列
​​*/
プライベート関数 _insert_record($table, $num_fields, $record) {
// カンマ区切りの SQL フィールド
$挿入 = ''; $comma = ""
; $insert .= "INSERT INTO `" . $table . "` VALUES(";
) // 各サブセクションのコンテンツをループします
for($i = 0; $i $insert .= ($comma . "'" . mysql_escape_string ( $record [$i] ) . "'"); $comma = ","; }
$insert .= ");" . 戻り $insert; }

/**
*ファイルに書き込む
*
* @param 文字列 $sql
* @param string $ファイル名
* @param 文字列 $dir
* @return ブール値
​​*/
プライベート関数 _write_file($sql, $filename, $dir) {
$dir = $dir : './backup/'; //ディレクトリを作成します
if (! is_dir ( $dir )) {
mkdir ( $dir, 0777, true ); }
$re = true; If (! @$fp = fopen ( $dir . $filename, "w+" )) {
$re = false; $this->_showMsg("SQL ファイルを開けませんでした!",true); }
If (! @fwrite ( $fp, $sql )) {
$re = false; $this->_showMsg("SQL ファイルの書き込みに失敗しました。ファイルが書き込み可能かどうかを確認してください",true); }
if (! @fclose ( $fp )) {
$re = false; $this->_showMsg("SQL ファイルを閉じることができませんでした!",true); }

$re を返します。 }

/*
*
* ---------------------------- 上: データベースのエクスポート ----------- 分割線 ---- ------次: データベースのインポート--------------------------------
*/

/**
* バックアップデータをインポートします
* 説明: ボリューム ファイル形式 20120516211738_all_v1.sql
* パラメータ: ファイルパス (必須)
*
* @param 文字列 $sqlfile
​​*/
関数復元($sqlfile) {
// ファイルが存在するかどうかを確認します
if (! file_exists ( $sqlfile )) {
$this->_showMsg("SQL ファイルが存在しません。確認してください。",true); 終了 (); }
$this->lock ( $this->database ); // データベースの保存場所を取得します
$sqlpath = パス情報 ($sqlfile); $this->sqldir = $sqlpath ['dirname']; // サブボリュームが含まれているかどうかを確認し、20120516211738_all_v1.sql を _v から分離します。存在する場合は、サブボリュームがあることを意味します
$volume = 爆発 ( "_v", $sqlfile ); $volume_path = $volume [0]; $this->_showMsg("プログラムが終了しないように、ブラウザを更新して閉じないでください。注意しないと、データベース構造が破損します。"); $this->_showMsg("バックアップ データをインポート中です。お待​​ちください!"); if (emptyempty ( $volume [1] )) {
$this->_showMsg ( "SQL のインポート: " . $sqlfile . '');                                                                                                                                                                                                                           If ($this->_import ( $sqlfile )) {
$this->_showMsg( "データベースは正常にインポートされました!");                                                                                          $this->_showMsg('データベースのインポートに失敗しました!', true); 終了 ();                                                                              } else {
// スクロールがある場合、現在の 1 ポイント ボリュームが表示され、残りのスクロールが実行されます。 $volume_id =explode ( ".sq", $volume [1] ); // 現在のボリュームは $volume_id です
$volume_id = intval ( $volume_id [0] ); while ( $volume_id ) {
$tmpfile = $volume_path .$volume_id
// 他のボリュームが存在するため、実行を続行します
If (file_exists ( $tmpfile )) {
// インポートメソッドを実行します
$this->msg .= "ボリューム $volume_id: '
'; If ($this->_import ($tmpfile)) {

} else {
$volume_id = $volume_id :1; exit ( "ボリュームのインポート: " . $tmpfile . '失敗! データベース構造が破損している可能性があります! ボリューム 1 からインポートしてみてください' );
                                                                                               } それ以外 { $ This-& gt; msg. = "このサブバックアップは正常に導入されました! & Lt; br /& gt;";
                                                                                      $volume_id ++;                                                                                }if (emptyempty ( $volume [1] )) {
$this->_showMsg ( "SQL のインポート: " . $sqlfile . '');                                                                                                                                                                                                                           If ($this->_import ( $sqlfile )) {
$this->_showMsg( "データベースは正常にインポートされました!");                                                                                          $this->_showMsg('データベースのインポートに失敗しました!',true); 終了 ();                                                                                } else {
// スクロールがある場合、current は現在のロール数となり、残りのスクロールが実行されます。 $volume_id =explode ( ".sq", $volume [1] ); // 現在のボリュームは $volume_id です
$volume_id = intval ( $volume_id [0] ); while ( $volume_id ) {
$tmpfile = $volume_path .$volume_id
// 他のボリュームが存在するため、実行を続行します
If (file_exists ( $tmpfile )) {
// インポートメソッドを実行します
$this->msg .= "ボリューム $volume_id: '
'; If ($this->_import ($tmpfile)) {

} else {
$volume_id = $volume_id :1; exit ( "ボリュームのインポート: " . $tmpfile . '失敗! データベース構造が破損している可能性があります! ボリューム 1 からインポートしてみてください' );
                                                                                               } それ以外 {$ this> msg。= "このボリュームのすべてのバックアップは正常にインポートされました!< br />";
                                                                                      $volume_id ++;                                                                                }
}

/**
* SQLをデータベースにインポートします(通常のインポート)
*
* @param 文字列 $sqlfile
* @return ブール値
​​*/
プライベート関数 _import($sqlfile) {
// SQL ファイルに含まれる SQL ステートメントの配列
$sqls = 配列
; $f = fopen ( $sqlfile, "rb" ); //テーブルバッファ変数を作成します
$create_table = ''; while ( ! feof ( $f ) ) {
// SQLの各行を読み取ります $line = fgets ( $f ); // このステップでは、作成されたテーブルを完全な SQL ステートメントに合成します
// 末尾に ';' (つまり、完全な SQL ステートメント、ここに insert ステートメント) が含まれておらず、'ENGINE=' (つまり、テーブルを作成する最後の文) が含まれていない場合
If (! preg_match ( '/;/', $line ) || preg_match ( '/ENGINE=/', $line )) {
// この SQL ステートメントと作成されたテーブル SQL 接続を保存します
$create_table .= $line; // テーブル作成の最後の文が含まれている場合
If (preg_match ( '/ENGINE=/', $create_table)) {
// SQL文を実行してテーブルを作成します
                                                                                                                                                        // 現在のテーブルをクリアし、次のテーブルを作成する準備をします
$create_table = '';                                                                                       // 今回はスキップします
続けてください。                                                                                // SQL ステートメントを実行します
$this->_insert_into($line); }
fclose ( $f ); true を返します
}

// 単一の SQL ステートメントを挿入します
プライベート関数 _insert_into($sql){
If (! mysql_query ( トリム ( $sql ) )) {
$this->msg .= mysql_error (); false を返します
}
}

/*
* -----------------------------データベースインポート終了--------------- - -----------------
*/

//データベース接続を閉じる
プライベート関数 close() {
mysql_close ($this->db); }

// バックアップまたはインポート中のエラーを避けるためにデータベースをロックします
プライベート関数 lock($tablename, $op = "WRITE") {
If (mysql_query ( "lock tables " . $tablename . " " . $op ))
true を返します。 その他
false を返します
}

// ロックを解除します
プライベート関数unlock() {
if (mysql_query ( "テーブルのロックを解除" ))
true を返します。 その他
false を返します
}

// 破壊
関数 __destruct() {
If($this->db){
mysql_query ( "テーブルのロックを解除", $this->db ); mysql_close ($this->db); }
}
}
?>


この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。

http://www.bkjia.com/PHPjc/933601.html

www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/933601.html技術記事 PHP による mysql バックアップおよびリカバリ ボリュームの処理方法の実装 この記事では、mysql ボリュームの例で、PHP による mysql バックアップおよびリカバリ ボリューム処理の実装方法について説明します。参考のためにみんなで共有してください。具体的な分析は以下の通りです...
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPの継続的な使用:その持久力の理由PHPの継続的な使用:その持久力の理由Apr 19, 2025 am 12:23 AM

まだ人気があるのは、使いやすさ、柔軟性、強力なエコシステムです。 1)使いやすさとシンプルな構文により、初心者にとって最初の選択肢になります。 2)Web開発、HTTP要求とデータベースとの優れた相互作用と密接に統合されています。 3)巨大なエコシステムは、豊富なツールとライブラリを提供します。 4)アクティブなコミュニティとオープンソースの性質は、それらを新しいニーズとテクノロジーの傾向に適応させます。

PHPおよびPython:類似点と相違点を調査しますPHPおよびPython:類似点と相違点を調査しますApr 19, 2025 am 12:21 AM

PHPとPythonはどちらも、Web開発、データ処理、自動化タスクで広く使用されている高レベルのプログラミング言語です。 1.PHPは、ダイナミックウェブサイトとコンテンツ管理システムの構築によく使用されますが、PythonはWebフレームワークとデータサイエンスの構築に使用されることがよくあります。 2.PHPはエコーを使用してコンテンツを出力し、Pythonは印刷を使用します。 3.両方ともオブジェクト指向プログラミングをサポートしますが、構文とキーワードは異なります。 4。PHPは弱いタイプの変換をサポートしますが、Pythonはより厳しくなります。 5. PHPパフォーマンスの最適化には、Opcacheおよび非同期プログラミングの使用が含まれますが、PythonはCprofileおよび非同期プログラミングを使用します。

PHPおよびPython:さまざまなパラダイムが説明されていますPHPおよびPython:さまざまなパラダイムが説明されていますApr 18, 2025 am 12:26 AM

PHPは主に手順プログラミングですが、オブジェクト指向プログラミング(OOP)もサポートしています。 Pythonは、OOP、機能、手続き上のプログラミングなど、さまざまなパラダイムをサポートしています。 PHPはWeb開発に適しており、Pythonはデータ分析や機械学習などのさまざまなアプリケーションに適しています。

PHPとPython:彼らの歴史を深く掘り下げますPHPとPython:彼らの歴史を深く掘り下げますApr 18, 2025 am 12:25 AM

PHPは1994年に発信され、Rasmuslerdorfによって開発されました。もともとはウェブサイトの訪問者を追跡するために使用され、サーバー側のスクリプト言語に徐々に進化し、Web開発で広く使用されていました。 Pythonは、1980年代後半にGuidovan Rossumによって開発され、1991年に最初にリリースされました。コードの読みやすさとシンプルさを強調し、科学的コンピューティング、データ分析、その他の分野に適しています。

PHPとPythonの選択:ガイドPHPとPythonの選択:ガイドApr 18, 2025 am 12:24 AM

PHPはWeb開発と迅速なプロトタイピングに適しており、Pythonはデータサイエンスと機械学習に適しています。 1.PHPは、単純な構文と迅速な開発に適した動的なWeb開発に使用されます。 2。Pythonには簡潔な構文があり、複数のフィールドに適しており、強力なライブラリエコシステムがあります。

PHPとフレームワーク:言語の近代化PHPとフレームワーク:言語の近代化Apr 18, 2025 am 12:14 AM

PHPは、多数のWebサイトとアプリケーションをサポートし、フレームワークを通じて開発ニーズに適応するため、近代化プロセスで依然として重要です。 1.PHP7はパフォーマンスを向上させ、新機能を紹介します。 2。Laravel、Symfony、Codeigniterなどの最新のフレームワークは、開発を簡素化し、コードの品質を向上させます。 3.パフォーマンスの最適化とベストプラクティスは、アプリケーションの効率をさらに改善します。

PHPの影響:Web開発などPHPの影響:Web開発などApr 18, 2025 am 12:10 AM

phphassiblasifly-impactedwebdevevermentandsbeyondit.1)itpowersmajorplatformslikewordpratsandexcelsindatabase interactions.2)php'sadaptableability allowsitale forlargeapplicationsusingframeworkslikelavel.3)

スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?スカラータイプ、リターンタイプ、ユニオンタイプ、ヌル可能なタイプなど、PHPタイプのヒントはどのように機能しますか?Apr 17, 2025 am 12:25 AM

PHPタイプは、コードの品質と読みやすさを向上させるためのプロンプトがあります。 1)スカラータイプのヒント:php7.0であるため、基本データ型は、int、floatなどの関数パラメーターで指定できます。 3)ユニオンタイプのプロンプト:PHP8.0であるため、関数パラメーターまたは戻り値で複数のタイプを指定することができます。 4)Nullable Typeプロンプト:null値を含めることができ、null値を返す可能性のある機能を処理できます。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境