在宝塔面板中使用PHP8.4配合FTP功能,可以把指定站点的文件自动上传到远程FTP服务器,实现简单的文件同步与备份。这种方式不需要第三方同步工具,利用PHP8.4原生支持就能完成。

环境准备
首先在宝塔面板中确认PHP8.4已安装并启用了FTP扩展。进入软件商店找到对应PHP8.4设置,在安装扩展中查看ftp是否勾选,未开启则安装并重启PHP服务。
编写同步脚本
下面示例用PHP8.4的FTP函数连接远程服务器,并把本地站点目录中的文件递归上传。注意代码中所有HTML特殊字符均已转义。
<?php
// 配置FTP信息
$ftp_host = '192.168.0.1';
$ftp_user = 'testuser';
$ftp_pass = 'testpass';
$local_dir = '/www/wwwroot/example_site/';
$remote_dir = '/backup/';
// 连接FTP
$conn = ftp_connect($ftp_host, 21, 10);
if (!$conn) {
die('无法连接FTP服务器');
}
if (!ftp_login($conn, $ftp_user, $ftp_pass)) {
die('FTP登录失败');
}
ftp_pasv($conn, true);
// 递归上传函数
function sync_folder($conn, $local, $remote) {
if (!is_dir($local)) {
return;
}
$items = scandir($local);
foreach ($items as $item) {
if ($item == '.' || $item == '..') {
continue;
}
$local_path = $local . $item;
$remote_path = $remote . $item;
if (is_dir($local_path)) {
if (!@ftp_chdir($conn, $remote_path)) {
ftp_mkdir($conn, $remote_path);
}
sync_folder($conn, $local_path . '/', $remote_path . '/');
} else {
ftp_put($conn, $remote_path, $local_path, FTP_BINARY);
}
}
}
sync_folder($conn, $local_dir, $remote_dir);
ftp_close($conn);
echo '同步完成';
?>
配置宝塔计划任务
打开宝塔面板计划任务,添加任务类型选Shell脚本或PHP脚本,命令填写 php /www/wwwroot/sync.php,设置每天执行时间即可自动同步。
注意事项
- 远程FTP目录权限需可写,否则ftp_mkdir或ftp_put会失败。
- 大文件建议用被动模式ftp_pasv避免防火墙拦截。
- 脚本中ftp_connect连接地址若为内网192.168.0.1或127.0.0.1可直接使用。
使用PHP8.4原生FTP函数做同步轻量可靠,适合文件量不大的站点运维场景。