1、PHP实现Mysql远程同步代码 需求:由于公司的英文网站放置在美国,而这些网站的数据要与大陆的服务器数据同步。 同步时间在一天之内。 拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了 平时使用的CSV文件批量录入数据。于是尝试使用CSV导入导出。 导入到处框架如下: 1首先将数据导出成CSV的格式。 建立一文件,放置在中国服务器上:csv.php.其实就是一个导出函数,通过数据库,表名和SQL语句来获得数据。
2、 Mysql数据库的主机 * @param string 数据库名称 * @param string 数据库中的表名 * @param string 数据库的连接用户名 * @param string 数据库的连接密码 * @param string 数据库的表名 * @param string 数据库的 * @param string 错误页面 * @param string SQL语句 * * @return text
3、 返回CSV格式的内容 * * @access public */ function 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,
4、 $user,$pass) or 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)) {
5、 $schema_insert = ''; for ($j = 0; $j < $fields_cnt; $j++) { if (!isset($row[$j]) || is_null($row[$j])) { $schema_insert .="NULL"; //用什么来替换空值 } elseif ($row[$j] == '0' || $row[$j] != '') { // loic1 :用引号包含字段值
6、 if ($csv_enclosed == '') { $schema_insert .= $row[$j]; } else { $schema_insert .= $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $row[$j])
7、 . $csv_enclosed; } } else { $schema_insert .= ''; } if ($j < $fields_cnt-1) { $schema_insert .= $csv_separator; } } // end for // fwrite($fp,$schema_insert . $csv_terminated)
8、 $cc.=$schema_insert . $csv_terminated; } // end while mysql_free_result($result); // fclose($fp); return $cc; } ?> 2.将CSV格式的内容导入到表中 在美国服务器上建立个导入的文件,放置:import.php ,代码如下:
9、 string 数据库名称 * @param string 数据库中的表名 * @param string 数据库的连接用户名 * @param string 数据库的连接密码 * @param string 数据库的表名 * * @return bool 是否执行成功 * * @access public */ function uploadFileOfCsv($host,$db,$user,$pass,$table,$content){ mysql_c
10、onnect($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);
11、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_a
12、rr[0]) == ""){ echo ""; exit; } $query = "INSERT INTO
13、 $db.$table"; $query .=" values ( "; for($q=0;$q<$fields_cnt;$q++){ if($q==$fields_cnt-1){ $tmp=$tmp_arr[$q]; $query.="'$tmp');";
14、 }else{ $tmp=$tmp_arr[$q]; $query.="'$tmp',"; } }//end for($q=0;
15、 log2($query); mysql_query($query); } fclose($fp); return "OK"; unlink("C:test.csv"); } function log2($event = null){ //global $db;
16、 // global $login;
if(LOG_ENABLED){
$now = date("Y-M-d H:i:s");
$fd = fopen ("C:log.html",'a');
$log = $now." ".$_SERVER["REMOTE_ADDR"] ." - $event
";
17、 fwrite($fd,$log); fclose($fd); } } ?> 3调用函数执行导出 在中国服务器上再建立一个 文件:test_export.php,调用前面的csv.php的函数,然后将数据转成CSV,然后临时存到一个表单的textera中,注意表单提交的位置:
18、ass="";
//导出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($handle);
?>
19、orm id="form1" name="form1" method="post" action="http://美国网站的地址/test2.php">
20、美国服务器上防置如下文件用于接受上传上来的数据,文件名为 test_import.php: 最后 利用Windows-xp/nt/03 控制面版中自带 任务计划,调度执行中国服务器test_export.php文件即可
©2010-2025 宁波自信网络信息技术有限公司 版权所有
客服电话:4009-655-100 投诉/维权电话:18658249818