ホームページ >php教程 >php手册 >PHPでmysql同期を実装する方法

PHPでmysql同期を実装する方法

WBOY
WBOYオリジナル
2016-06-13 12:21:011046ブラウズ

要件を取得した後、これら 2 つの Web サイトの MYSQL データベースにはリモートからアクセスできないことがわかりました (セキュリティ第一)。そこで、私が普段データを一括入力するために使っているCSVファイルのことを思い出しました。したがって、
CSV のインポートとエクスポートを使用してみてください。
インポートのフレームワークは次のとおりです:
1 まず、データを CSV 形式でエクスポートします。
ファイル csv.php を作成し、中国のサーバーに配置します。これは実際には、データベース、テーブル名、SQL ステートメントを通じてデータを取得するエクスポート関数です。
csv.php

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


/* *
* データベース内のテーブルを CSV ファイルに出力します
*
* @param string Mysql データベース ホスト
* @param string データベース名
* @param string データベース内のテーブル Name
* @param string データベース接続ユーザー名
* @param string データベース接続パスワード
* @param string データベーステーブル名
* @param string データベース
* @param string エラーページ
* @param string SQL ステートメント
*
* @return text 内容を CSV 形式で返します
*
* @access public
*/
関数 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);
result = mysql_query(sql_query);
fields_cnt = mysql_num_fields(result);
cc="";
// fp = fopen(filename, 'w' );
//データをフォーマットします
while (row = mysql_fetch_row(result)) {
schema_insert = ''; ; field_cnt; j ) {
if (!isset(row[j]) || is_null(row[j])) {
schema_insert .="NULL";
} elseif (row[j] == '0' || row[j] != '') {
// loic1 : フィールド値を引用符で囲みます
if (csv_enclosed == '') {
schema_insert .= row[j ];
} else {
schema_insert .= csv_enclosed
. str_replace(csv_enclosed, csv_escaped, row[j])
>}
} else {
schema_insert .= '';
}
if (j schema_insert .= csv_separator;
} // 終了 for
// fwrite (fp,schema_insert . csv_terminated);
cc.=schema_insert . csv_terminated;
mysql_free_result(result); // fclose (fp);
return cc;
}
?>


2. コンテンツをテーブルにインポートします
サーバーと場所: import.php、コード 次のように:


コードをコピー

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

/*** アップロードされたファイルからテーブルにデータをインポートします *

* @param string Mysql データベース ホスト

* @param string データベース名
* @param string database テーブル名
* @param string データベース接続ユーザー名
* @param string データベース接続パスワード
* @param string データベーステーブル名
*
* @return bool 実行可否 成功
*
* @パブリックにアクセス
*/
function UploadFileOfCsv(host,db,user,pass,table,content){
mysql_connect(host, user,pass) or die("接続できませんデータベースの場合、エラー コードは次のとおりです: " .mysql_error());
mysql_select_db(db);
result = mysql_query("select * from table");
fields_cnt = mysql_num_fields(result);
test2=array(array());
rownum=0;
log("抽出されたデータは次のとおりです:
".content); :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 "";
exit;
}
query = "データベースに挿入.table";
query .= value ( ";
for(q=0;qif(q==fields_cnt-1){
tmp =tmp_arr [q];
クエリ.="'tmp');
}else{
tmp=tmp_arr[q];
}
}//end for(q=0;
log2(query);
mysql_query(query);
}
fclose(fp);
return "OK ";
unlink("C:test.csv");
}
function log2(event = null){
//グローバル db;
// グローバル ログイン;
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 に変換し、一時的にファイルに保存します。 form
textera では、フォーム送信の場所に注意してください:

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


require_once( "csv.php");
host="localhost";
user="root"; ";
//tb_contact テーブルをエクスポートします データは CSV ファイルです
filename = 'file4.csv';
cc=PMA_exportData( host,db,user,pass, filename,"tb_project_dvp", " ", "test.php", "select * from tb_project_dvp");
handle = fopen(filename, "rb");
contents = fread(handle, filesize (filename));
fclose(ハンドル);
?>


<テキストエリア名 ="テキストエリア"cols="180" 行数="30">
<入力タイプ= hidden" name="action" value="1 "/>








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



コードをコピー

コードは次のとおりです: require_once("csv.php ");

require_once("import.php") ;
host="localhost";
db="wintopweb";
user="root";
pass="";
if(_POST['action']==" 1"){
content=_POST['textarea'];
echo UploadFileOfCsv(host,db,user,pass,"tb_project_dvp",content) ;
}
?>


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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。