您当前的位置: 首页 > 网站编程 > PHP教程 > 浅析用PHP实现同步远程Mysql

浅析用PHP实现同步远程Mysql

作者:不详 来源:网络 发布时间: 2010-04-22 21:43 点击:
需求:由于公司的英文网站放置在美国,而这些网站的数据要与大陆的服务器数据同步。同步时间在一天之内。 拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了平时使用的CSV文件批量录入数据。于是尝试使用CSV导入导出。 导入到处框架如

浅析用PHP实现同步远程Mysql

  需求:由于公司的英文网站放置在美国,而这些网站的数据要与大陆的服务器数据同步。同步时间在一天之内。
  拿到需求之后,发现这两个网站的MYSQL数据库都不能远程访问(安全第一吧)。于是想起了平时使用的CSV文件批量录入数据。于是尝试使用CSV导入导出。
  
  导入到处框架如下:
  
  1首先将数据导出成CSV的格式。
  建立一文件,放置在中国服务器上:csv.php.其实就是一个导出函数,通过数据库,表名和SQL语句来获得数据。
  
  <?php
  /**
  *输出一个数据库中的表到一个CSV文件中
  *
  *@paramstringMysql数据库的主机
  *@paramstring数据库名称
  *@paramstring数据库中的表名
  *@paramstring数据库的连接用户名
  *@paramstring数据库的连接密码
  *@paramstring数据库的表名
  *@paramstring数据库的
  *@paramstring错误页面
  *@paramstringSQL语句
  *
  *@returntext返回CSV格式的内容
  *
  *@accesspublic
  */
  functionPMA_exportData(host,db,user,pass,filename,table,crlf,error_url,sql_query){
  what="csv";
  csv_terminated="";
  csv_separator=",";
  csv_enclosed="";
  csv_escaped="&nbsp;";
  
  
  mysql_connect(host,user,pass)ordie("不能连接数据库,错误代码如下:".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='';
  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:用引号包含字段值
  
  if(csv_enclosed==''){
  schema_insert.=row[j];
  }else{
  schema_insert.=csv_enclosed
  .str_replace(csv_enclosed,csv_escaped.csv_enclosed,row[j])
  .csv_enclosed;
  }
  }else{
  schema_insert.='';
  }
  if(j<fields_cnt-1){
  schema_insert.=csv_separator;
  }
  }//endfor
  
  //fwrite(fp,schema_insert.csv_terminated);
  cc.=schema_insert.csv_terminated;
  }//endwhile
  mysql_free_result(result);
  
  
  //fclose(fp);
  returncc;
  }
  
  ?>
  
  2.将CSV格式的内容导入到表中
  在美国服务器上建立个导入的文件,放置:import.php,代码如下:
  
  <?php
  
  /**
  *从一个上传的文件中将数据导入到一个表中
  *
  *@paramstringMysql数据库的主机
  *@paramstring数据库名称
  *@paramstring数据库中的表名
  *@paramstring数据库的连接用户名
  *@paramstring数据库的连接密码
  *@paramstring数据库的表名
  *
  *@returnbool是否执行成功
  *
  *@accesspublic
  */
  functionuploadFileOfCsv(host,db,user,pass,table,content){
  
  mysql_connect(host,user,pass)ordie("不能连接数据库,错误代码如下:".mysql_error());
  mysql_select_db(db);
  
  
  result=mysql_query("select*fromtable");
  fields_cnt=mysql_num_fields(result);
  
  
  test2=array(array());
  rownum=0;
  log("提取的数据如下:<br>".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"<scriptlanguage='javascript'>";
  echo"alert('第".i."行的ID空,请检查!');";
  echo"location.href=document.referrer;";
  echo"</script>";
  exit;
  }
  
  query="INSERTINTOdb.table";
  query.="values(";
  for(q=0;q<fields_cnt;q++){
  if(q==fields_cnt-1){
  tmp=tmp_arr[q];
  query.="'tmp');";
  }else{
  tmp=tmp_arr[q];
  query.="'tmp',";
  
  
  }
  }//endfor(q=0;
  
  
  log2(query);
  mysql_query(query);
  
  
  }
  fclose(fp);
  
  
  return"OK";
  unlink("C:test.csv");
  
  
  }
  
  
  
  functionlog2(event=null){
  //globaldb;
  //globallogin;
  
  if(LOG_ENABLED){
  now=date("Y-M-dH:i:s");
  
  fd=fopen("C:log.html",'a');
  log=now.""._SERVER["REMOTE_ADDR"]."-event<br>";
  fwrite(fd,log);
  fclose(fd);
  }
  }
  
  
  
  ?>
  3调用函数执行导出
  
  在中国服务器上再建立一个文件:test_export.php,调用前面的csv.php的函数,然后将数据转成CSV,然后临时存到一个表单的textera中,注意表单提交的位置:
  
  <?php
  require_once("csv.php");
  host="localhost";
  db="project";
  user="root";
  pass="";
  
  //导出tb_contact表的数据为csv文件
  filename='file4.csv';
  cc=PMA_exportData(host,db,user,pass,filename,"tb_project_dvp","","test.php","select*fromtb_project_dvp");
  
  
  handle=fopen(filename,"rb");
  contents=fread(handle,filesize(filename));
  fclose(handle);
  
  ?>
  <formid="form1"name="form1"method="post"action="http://美国网站的地址/test2.php">
  
  <p>
  <textareaname="textarea"cols="180"rows="30"><?phpechocc?></textarea>
  <inputtype="hidden"name="action"value="1"/>
  </p>
  <p>
  <inputtype="submit"name="Submit"value="提交">
  </p>
  </form>
  
  
  再在美国服务器上防置如下文件用于接受上传上来的数据,文件名为test_import.php:
  
  <?php
  require_once("csv.php");
  require_once("import.php");
  
  
  host="localhost";
  db="wintopweb";
  user="root";
  pass="";
  
  if(_POST['action']=="1"){
  
  content=_POST['textarea'];
  echouploadFileOfCsv(host,db,user,pass,"tb_project_dvp",content);
  
  }  
  
  ?>  
  
  最后利用Windows-xp/nt/03控制面版中自带任务计划,调度执行中国服务器test_export.php文件即可。

分享到:
本文"浅析用PHP实现同步远程Mysql"由远航站长收集整理而来,仅供大家学习与参考使用。更多网站制作教程尽在远航站长站。
顶一下
(0)
0%
踩一下
(0)
0%
[点击 次] [返回上一页] [打印]
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
关于本站 - 联系我们 - 网站声明 - 友情连接- 网站地图 - 站点地图 - 返回顶部
Copyright © 2007-2013 www.yhzhan.com(远航站长). All Rights Reserved .
远航站长:为中小站长提供最佳的学习与交流平台,提供网页制作与网站编程等各类网站制作教程.
官方QQ:445490277 网站群:26680406 网站备案号:豫ICP备07500620号-4