PHP编写文件多服务器同步程序


Posted in PHP onJuly 02, 2016

本文实例为大家分享了PHP文件多服务器同步工具,具体内容如下

<?php
header('Content-type:text/html;charset=utf-8');
//文件名称:PHP文件多服务器同步工具
//文件作用:本文件所在服务器为主服务器,其它文件所在服务器可作分流或者备份。本文件需要jQuery库。你也可以外链别人的
//最后修改时间:2016-06-30
//BY:strwei
 
if(!empty($_POST['files'])) sync();
 
function sync(){
  $aFiles   = explode("\n", $_POST['files']);
//var_dump($aFiles);exit;
  foreach($aFiles as $k => $v){
    if(strlen($v) <= 5) unset($aFiles[$k]);
  }
  array_filter($aFiles);
  if(empty($aFiles)) {
    echo '没有文件'; exit;
  }
  $aFTPServers = array(
            'server1' => array('strwei.com','FTP用户名','FTP密码', '打开FTP进去时的默认目录'),//ftp地址、用户名,密码、FTP打开此站点时的默认目录
            //'server2' => array('yy.9.je','FTP用户名','FTP密码','打开FTP进去时的默认目录'),
  );
  $aAbortFile = array('robots.txt');
  $aErrors   = array();
  $iError   = count($aErrors);
  $aSuc    = array();
  foreach($aFTPServers as $ftp) {
    $conn  = ftp_connect($ftp[0]);
    if(empty($conn)){
      $iError = $iError + 1;
      array_push($aErrors, $iError . "、服务器 $ftp 无法连接");
      continue;
    }
    $login = ftp_login($conn, $ftp[1], $ftp[2]);
    if(empty($login)){
      $iError = $iError + 1;
      array_push($aErrors, $iError . "、服务器 $ftp[0] 无法登录");
      continue;
    }
 
    $ftp_root = '';
    if(!empty($ftp[3])) $ftp_root = ftp_chdir($conn, $ftp[3]);
    $ftp_root = ftp_pwd($conn);
    if(substr($ftp_root, -1) == '/') $ftp_root = substr($ftp_root, 0, -1);
    foreach($aFiles as $k => $v){
      $s = basename($v);
      if(in_array($s, $aAbortFile)) {
        $iError = $iError + 1;
        array_push($aErrors, $iError . "、文件 $v 不允许同步");
        continue;
      }
      if(!file_exists('.'.$v)) {
        $iError = $iError + 1;
        array_push($aErrors, $iError . "、文件 $v 不存在");
        continue;
      }
      $upload = ftp_put($conn, $ftp_root . $v, '.' . $v, FTP_BINARY);
      if(empty($upload)){
        $iError = $iError + 1;
        array_push($aErrors, $iError . "、文件 $v 上传失败");
        continue;
      }
      array_push($aSuc, $v);
    }
  }
  if(empty($aErrors)) {
    echo '上传成功: ' . implode('、', $aSuc);
    exit;
  }
  echo implode('<br>', $aErrors);
  exit;
}
 
$cc = '\r\n';
echo '<script src="//cdn.bootcss.com/jquery/3.0.0/jquery.js"></script>';
echo <<<EOF
请输入你要同步的文件名(包括它的路径),例如:inoutcome_final.zip、/default.php、/index.php、/inoutcome_final.sqlite等等,每行输入一个文件名,可回车输入多个<br><br>
<textarea style="width:450px; height:85px; border:1px #000 solid;" id="id_file" onkeyup="this.value=this.value.replace(/ /g,'');"></textarea><br>
<button id="btn_submit" onclick="return submit_sync();">同步以上文件</button> <br><span id="show_sync" style="color:#f00;"></span>
 
<script>
function submit_sync(){
  $("#btn_submit").hide();
  var sFiles = $("#id_file").val();
  var aFiles = sFiles.split(/$cc/);
  if(aFiles.length <= 0 || aFiles[0].length <= 5) {
    alert("请手工写入要同步的文件清单");
    $("#btn_submit").show("slow");
    return false;
  }
  $.post("?", {"files":sFiles}, function(v){
    $("#show_sync").text(v);
    if(v.indexOf("上传成功") != -1) $("#id_file").val('');
    $("#btn_submit").show(5000);
  })
  return true;
}
</script>
 
EOF;
?>

以上就是本文的全部内容,希望对大家学习php程序设计有所帮助。

PHP 相关文章推荐
PHP与SQL注入攻击[二]
Apr 17 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
基于PHP读取TXT文件向数据库导入海量数据的方法
Apr 23 PHP
PHP使用range协议实现输出文件断点续传代码实例
Jul 04 PHP
PHP合并静态文件详解
Nov 14 PHP
php获取网站百度快照日期的方法
Jul 29 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP区块查询实现方法分析
May 12 PHP
PHP实现的数据对象映射模式详解
Mar 20 PHP
Thinkphp5.0 框架使用模型Model添加、更新、删除数据操作详解
Oct 11 PHP
TP5框架实现签到功能的方法分析
Apr 05 PHP
PHP使用非对称加密算法RSA
Apr 21 PHP
php blowfish加密解密算法
Jul 02 #PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 #PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 #PHP
PHP读书笔记整理_结构语句详解
Jul 01 #PHP
PHP安装GeoIP扩展根据IP获取地理位置及计算距离的方法
Jul 01 #PHP
php投票系统之增加与删除投票(管理员篇)
Jul 01 #PHP
PHP读书笔记_运算符详解
Jul 01 #PHP
You might like
dedecms模板标签代码官方参考
2007/03/17 PHP
php获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP设计模式之抽象工厂模式实例分析
2019/03/25 PHP
让textarea自动调整大小的js代码
2011/04/12 Javascript
setTimeout的延时为0时多个浏览器的区别
2012/05/23 Javascript
JS获得QQ号码的昵称,头像,生日的简单实例
2013/12/04 Javascript
jQuery过滤选择器:not()方法使用介绍
2014/04/20 Javascript
Jqgrid之强大的表格插件应用
2015/12/02 Javascript
jquery实现的判断倒计时是否结束代码
2016/02/05 Javascript
使用postMesssage()实现跨域iframe页面间的信息传递方法
2016/03/29 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
利用jQuery实现简单的拖曳效果实例代码
2017/10/20 jQuery
解决axios发送post请求返回400状态码的问题
2018/08/11 Javascript
JavaScript 高性能数组去重的方法
2018/09/20 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
sharp.js安装过程中遇到的问题总结
2020/04/02 Javascript
在Vue中使用Echarts可视化库的完整步骤记录
2020/11/18 Vue.js
Vant+postcss-pxtorem 实现浏览器适配功能
2021/02/05 Javascript
python比较两个列表大小的方法
2015/07/11 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Python dict的常用方法示例代码
2020/06/23 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
pip install命令安装扩展库整理
2021/03/02 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
日本面向世界,国际级的免税在线购物商城:DOKODEMO
2017/02/01 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
高中军训感言1000字
2014/03/01 职场文书
电力工程合作意向书
2015/05/11 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
爱国教育主题班会
2015/08/14 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
springboot + mongodb 通过经纬度坐标匹配平面区域的方法
2021/11/01 MongoDB