我需要同步两台独立服务器上的两个文件夹,一台是 Windows 服务器,另一台是 Linux 服务器。我创建了这个简短而方便的函数来帮助我完成此操作。请注意:此函数不会复制文件夹,并且如果远程文件夹包含除文件以外的任何其他内容,则可能会失败。
function sync_folders($host, $port, $username, $password, $remote_dir, $local_dir, $passive_mode = true) {
$conn_id = ftp_connect($host, $port);
if (!$conn_id) return false; # 连接失败
if (!ftp_login($conn_id, $username, $password)) { ftp_close($conn_id); return false; } # 登录失败
ftp_pasv($conn_id, $passive_mode);
if (!ftp_chdir($conn_id, $remote_dir)) { ftp_close($conn_id); return false; } # 更改目录失败
if (substr($local_dir, -1) != '/') $local_dir .= '/';
$list = ftp_nlist($conn_id, '.');
sort($list);
foreach ($list as $file) {
if (!file_exists($local_dir . $file)) {
$is_copied = ftp_get($conn_id, $local_dir . $file, $file, FTP_BINARY);
}
}
ftp_close($conn_id);
return true;
}