PHPでリモートの同期を実現 Mysql_PHPチュートリアル

WBOY
リリース: 2016-07-13 10:27:50
オリジナル
1015 人が閲覧しました

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; j if (!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 (j schema_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(結果);


test2=配列(配列());
行番号=0; log("抽出されたデータは次のとおりです:
".content);
fd1 = fopen ("C:test.csv",'a');
fwrite(fd1,content);
fclose(fd1);

fp = fopen("C:test.csv", "r");

while (buffer = fgets(fp,4096))

{
i++;
tmp_arr =explode(",",buffer);

if(trim(tmp_arr[0]) == ""){
echo "";
終了します;
}

クエリ = "INSERT INTO db.table";
クエリ .= 値 ( ";
for(q=0;q if(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="プロジェクト";
ユーザー = "ルート";
pass="";

//tb_contactテーブルのデータをcsvファイルにエクスポートします
ファイル名 = 'file4.csv';

cc=PMA_exportData( host,db,user,pass, filename,"tb_project_dvp", "", "test.php", "select * from tb_project_dvp") ;



ハンドル = fopen(ファイル名, "rb");

内容 = fread(ハンドル, ファイルサイズ (ファイル名));

fclose(ハンドル);
?>










次に、アップロードされたデータを受け入れるために次のファイルを米国サーバーに設定します。ファイル名は test_import.php です。

require_once("csv.php");
require_once("import.php");


ホスト = "ローカルホスト";
db="wintopweb";
ユーザー = "ルート";
pass="";

if(_POST['アクション']=="1"){

content=_POST['textarea'];
echo UploadFileOfCsv(host,db,user,pass,"tb_project_dvp",content);

}

?>

最後に、Windows-xp/nt/03 コントロール パネルに付属のタスク プランを使用して、中国サーバーの test_export.php ファイルをスケジュールして実行します

http://www.bkjia.com/PHPjc/815028.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/815028.html技術記事 PHP はリモート Mysql 同期を実現します。 要件: 同社の英語 Web サイトは米国にあるため、これらの Web サイトのデータは中国本土のサーバー データと同期する必要があります。 同期時間は 1 日以内です。 取って...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート