场景
站点迁移时原站点的图片文件太多,通过打包下载再上传到新服务器速度太慢,通过 FTP 工具直接从老服务器上传到新服务器失败。因此使用 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);