PHP遍历文件并同步上传到服务器

简介: 在进行网站迁移时,由于原网站的图片文件过多,采用打包下载再上传的方式耗时过长,且尝试使用FTP工具从旧服务器传输至新服务器时失败。为解决此问题,特使用PHP编写了一款工具,该工具能扫描指定目录下的所有`.webp`图像文件,并将其上传至新的服务器,极大地提高了迁移效率。

场景

站点迁移时原站点的图片文件太多,通过打包下载再上传到新服务器速度太慢,通过 FTP 工具直接从老服务器上传到新服务器失败。因此使用 PHP 写了一个工具直接通过工具实现上传。

实现

<?php
function traverse($dir) {
    $files = scandir($dir);    
    $destinationDirectory = str_replace("/原网站路径/", '/新网站路径/',$dir.'/');
    //输出目标路径,方便排错
    echo "$destinationDirectory\n";
    foreach ($files as $file) {
        if ($file == '.' || $file == '..') {
            continue;
        }
        $path = $dir . '/' . $file;
        if (is_dir($path)) {
            traverse($path);
        } else {
          if (strpos($file, ".webp")) {
            echo "$path\n";//原文件路径
            echo "$destinationDirectory"."$file \n";//新文件路径
            echo "\n";
            fileUpload($path,$destinationDirectory.$file);
          }
        }
    }
}
/**
*@$local_file 本地文件路径
*@$remote_file 远程文件路径
*/
function fileUpload($local_file,$remote_file){
  
  $ftp_server = "example.com"; // FTP服务器地址
  $ftp_username = "username"; // FTP登录用户名
  $ftp_password = "password"; // FTP登录密码
   
  // 建立基础连接
  $conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server\n");
   
  // 使用提供的用户名和密码登录
  if (@ftp_login($conn_id, $ftp_username, $ftp_password)) {
      ftp_pasv($conn_id, true);//如果不加此句,会导致ftp_put出现错误
      // 上传文件
      if (ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII)) {
          echo "Successfully uploaded $local_file to $remote_file\n";
      } else {
          echo "There was a problem while uploading $local_file\n";
      }
  } else {
      echo "Couldn't connect as $ftp_username\n";
  }
   
  // 关闭连接
  ftp_close($conn_id);

}

$dir = "/www/mysite/images";//在traverse方法中的路径替换可以将 /www/mysite/ 替换为目标路径,比如替换为:/www/newsite/
traverse($dir);
相关文章
|
8月前
|
缓存 监控 网络安全
因服务器时间不同步引起的异常
因服务器时间不同步引起的异常
648 1
|
5天前
|
机器学习/深度学习 存储 监控
内部文件审计:企业文件服务器审计对网络安全提升有哪些帮助?
企业文件服务器审计是保障信息安全、确保合规的关键措施。DataSecurity Plus 是由卓豪ManageEngine推出的审计工具,提供全面的文件访问监控、实时异常告警、用户行为分析及合规报告生成功能,助力企业防范数据泄露风险,满足GDPR、等保等多项合规要求,为企业的稳健发展保驾护航。
|
6天前
|
安全 Linux Shell
使用SCP命令在CentOS 7上向目标服务器传输文件
以上步骤是在CentOS 7系统上使用SCP命令进行文件传输的基础,操作简洁,易于理解。务必在执行命令前确认好各项参数,尤其是目录路径和文件名,以避免不必要的传输错误。
72 17
|
11天前
|
自然语言处理 Unix Linux
解决服务器中Jupyter笔记本的文件名字符编码问题
通过上述步骤,可以有效解决Jupyter笔记本的文件名字符编码问题,确保所有文件能在服务器上正常访问并交互,避免因编码问题引起的混淆和数据丢失。在处理任何编码问题时,务必谨慎并确保备份,因为文件名变更是
58 17
|
3月前
|
Python
使用Python实现multipart/form-data文件接收的http服务器
至此,使用Python实现一个可以接收 'multipart/form-data' 文件的HTTP服务器的步骤就讲解完毕了。希望通过我的讲解,你可以更好地理解其中的逻辑,另外,你也可以尝试在实际项目中运用这方面的知识。
209 69
|
8月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
182 9
|
4月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
|
5月前
|
应用服务中间件 PHP nginx
当你的nginx服务器和php服务器不在一起的时候,这个nginx 的root目录问题
两个服务器的网站代码目录需要对齐,docker容器里面也是一样
|
6月前
|
存储 安全 网络安全
服务器感染了.baxia勒索病毒,如何确保数据文件完整恢复?
近年来,勒索病毒如.baxia不断演变,利用漏洞、社交工程等手段加密文件,威胁范围扩大。加密货币的兴起使其支付方式更匿名,追踪困难。技术支持尤为重要,添加技术服务号(shuju315),专业团队提供数据恢复方案。面对复杂解密要求,包括赎金支付、个人信息提供和执行特定操作,需保持冷静并寻求帮助。防御措施包括加强安全意识、定期备份数据、安装杀毒软件、避免未知文件、更新系统及制定应急响应计划。
258 11
|
8月前
|
XML 前端开发 JavaScript
PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑
本文深入探讨了PHP与Ajax在Web开发中的交互技术。PHP作为服务器端脚本语言,处理数据和业务逻辑;Ajax则通过异步请求实现页面无刷新更新。文中详细介绍了两者的工作原理、数据传输格式选择、具体实现方法及实际应用案例,如实时数据更新、表单验证与提交、动态加载内容等。同时,针对跨域问题、数据安全与性能优化提出了建议。总结指出,PHP与Ajax的结合能显著提升Web应用的效率和用户体验。
187 3