Php 如何通过脚本将一组文件/文件夹从linux服务器传输到另一个服务器?

Php 如何通过脚本将一组文件/文件夹从linux服务器传输到另一个服务器?,php,web-services,ftp,ssh,Php,Web Services,Ftp,Ssh,我每天都在创建一个php脚本来备份我的网站,备份到我的另一台linux服务器,但是我如何压缩所有文件并通过脚本发送到另一台linux服务器?bash中的一个可能解决方案 BACKUP_SERVER_PATH=remote_user@remote_server:/remote/backup/path/ SITE_ROOT=/path/to/your/site/ cd "$SITE_ROOT" now=$(date +%Y%m%d%H%M) tar -cvzf /tmp/yoursite.$now

我每天都在创建一个php脚本来备份我的网站,备份到我的另一台linux服务器,但是我如何压缩所有文件并通过脚本发送到另一台linux服务器?

bash中的一个可能解决方案

BACKUP_SERVER_PATH=remote_user@remote_server:/remote/backup/path/
SITE_ROOT=/path/to/your/site/

cd "$SITE_ROOT"
now=$(date +%Y%m%d%H%M)
tar -cvzf /tmp/yoursite.$now.tar.gz .
scp /tmp/yoursite.$now.tar.gz "$BACKUP_SERVER_PATH"
对于docroot的权限读取访问和scp对远程服务器的ssh访问,需要考虑一些额外的内容


注意,有很多方法可以做到这一点。另一个问题是,如果您不介意存储站点的未压缩版本,请使用rsync。

Timothée Groleau提供的答案应该是可行的,但我更喜欢用另一种方式:从我的备份机器上,一台具有大量可用存储的服务器启动一个备份所有其他服务器的过程

在我的环境中,我使用的配置文件列出了所有服务器、每个服务器的有效用户以及备份路径:

/usr/local/etc/backupserver.conf

/usr/local/sbin/backupserver

要使其正常工作,并且无需为每个要备份的服务器输入密码,您需要交换SSH密钥。关于如何执行此操作,stackoverflow上有许多问题/答案

最后一步是将其添加到cron中,以便每晚启动该流程:

/etc/crontab

192.168.44.34 userfoo /var/www/foosites
192.168.44.35 userbar /var/www/barsites
#!/bin/sh
CONFFILE=/usr/local/etc/backupservers.conf
SSH=`which ssh`

if [ ! -r "$CONFFILE" ]
then
  echo "$CONFFILE not readable" >&2
  exit 1
fi

if [ ! -w "/var/backups" ]
then
  echo "/var/backups is not writable" >&2
  exit 1
fi

while read host user path
do
  file="/var/backups/`date +%Y-%m-%d`.$host.$user.tar.bz2"
  touch $file
  chmod 600 $file
  ssh $user@$host tar jc $path > $file
done
0 2 * * * backupuser /usr/local/sbin/backupservers