PHP はリモート Mysql の同期を実現します:
要件: 会社の英語 Web サイトは米国にあるため、これらの Web サイトのデータは中国本土のサーバー データと同期する必要があります。 同期時間は 1 日以内です。
要件を取得した後、これら 2 つの Web サイトの MYSQL データベースにはリモートからアクセスできないことがわかりました (セキュリティ第一)。そこで、私が普段データを一括入力するために使っているcsvファイルのことを思い出しました。そこでCSVインポートとエクスポートを使ってみました。インポートされたフレームワークは次のとおりです:
1 まずデータをCSV形式でエクスポートします。
ファイル csv.php を作成し、中国のサーバーに配置します。これは実際には、データベース、テーブル名、SQL ステートメントを通じてデータを取得するエクスポート関数です。/**
の終了
* データベース内のテーブルをCSVファイルに出力します
*
* @param string MySQL データベースホスト
* @param string データベース名
* @param データベース内の文字列テーブル名
* @param string データベース接続ユーザー名
* @param string データベース接続パスワード
* @param string データベーステーブル名
* @param 文字列データベース
* @param文字列エラーページ
* @param string SQL ステートメント
*
* @return text 内容をCSV形式で返します
*
* @アクセス公開
*/
関数 PMA_exportData(host,db,user,pass,filename,table, crlf, error_url, sql_query) {
what="csv";
csv_terminated=" ";
csv_separator=",";
csv_enclosed=" ";
csv_escaped=" ";
mysql_connect(host, user,pass) または die("データベースに接続できません。エラー コードは次のとおりです:" . mysql_error());
mysql_select_db(db);
結果 = mysql_query(sql_query);
field_cnt = mysql_num_fields(結果);
cc="";
//fp = fopen(ファイル名, 'w');
//データのフォーマット
while (row = mysql_fetch_row(result)) {
schema_insert = '';
for (j = 0; jif (!isset(row[j]) || is_null(row[j])) {
schema_insert .="NULL" //null 値を置き換えるために使用するもの
; elseif (row[j] == '0' || row[j] != '') {
// loic1: 引用符を使用してフィールド値を含めます
if (csv_enclosed == '') {
schema_insert .= row[j];
} その他 {
schema_insert .= csv_enclosed
.str_replace(csv_enclosed, csv_escaped .csv_enclosed, row[j])
.csv_enclosed;
}
} その他 {
schema_insert .= '';
}
if (jschema_insert .= csv_separator;
}
} //// fwrite(fp,schema_insert . csv_terminated);
cc.=schema_insert .csv_terminated;
} // 途中で終了
mysql_free_result(結果);
// fclose(fp);
リターンCC;
}?>
2. CSV形式でコンテンツをテーブルにインポートします
US サーバーにインポート ファイルを作成して配置します: import.php コードは次のとおりです:/**
* アップロードされたファイルからテーブルにデータをインポートします
*
* @param string MySQL データベースホスト
* @param string データベース名
* @param データベース内の文字列テーブル名
* @param string データベース接続ユーザー名
* @param string データベース接続パスワード
* @param string データベーステーブル名
*
* @return bool 実行が成功したかどうか
*
* @アクセス公開
*/
function UploadFileOfCsv(host,db,user,pass,table,content){mysql_connect(host, user,pass) または die("データベースに接続できません。エラー コードは次のとおりです:" . mysql_error());
mysql_select_db(db);
result = mysql_query("select * from table");
field_cnt = mysql_num_fields(結果);
while (buffer = fgets(fp,4096))
test2=配列(配列());
行番号=0; log("抽出されたデータは次のとおりです:
".content);
fd1 = fopen ("C:test.csv",'a');
fwrite(fd1,content);
fclose(fd1);
fp = fopen("C:test.csv", "r");
{
i++;
tmp_arr =explode(",",buffer);
if(trim(tmp_arr[0]) == ""){
echo "";
終了します;
}
クエリ = "INSERT INTO db.table";
クエリ .= 値 ( ";
for(q=0;qif(q==fields_cnt-1){
tmp=tmp_arr[q];
query.="'tmp');";
}その他{
tmp=tmp_arr[q];
query.="'tmp',";
}
}//終了 for(q=0;
log2(クエリ);
mysql_query(クエリ);
}
fclose(fp);
「OK」を返します;
unlink("C:test.csv");
}
関数 log2(イベント = null){
//グローバルデータベース;
// グローバルログイン;
if(LOG_ENABLED){
now = date("Y-M-d H:i:s");
fd = fopen ("C:log.html",'a');
log = now." "._SERVER["REMOTE_ADDR"] ." - イベント
";
fwrite(fd,log);
fclose(fd);
}
}
?>
3エクスポートを実行する関数を呼び出します中国サーバー上に別のファイル test_export.php を作成し、前の csv.php の関数を呼び出し、データを CSV に変換し、フォームの textera に一時的に保存します。フォームの送信場所に注意してください。 :
require_once("csv.php"); ホスト = "ローカルホスト";
db="プロジェクト";
cc=PMA_exportData( host,db,user,pass, filename,"tb_project_dvp", "", "test.php", "select * from tb_project_dvp") ;
ユーザー = "ルート";
pass="";
//tb_contactテーブルのデータをcsvファイルにエクスポートします
ファイル名 = 'file4.csv';内容 = fread(ハンドル, ファイルサイズ (ファイル名));
ハンドル = fopen(ファイル名, "rb");fclose(ハンドル);
?>