PHP exec() rsync ssh to remote server 不起作用


php exec() rsync ssh to remote server not working

我正在尝试将文件从本地同步到远程服务器。当我在控制台上执行此操作时,它可以工作:

rsync -avzhe ssh/var/www/folder1/file5 root@192.168.56.74:/var/www/folder2

但是当我在我的 PHP 上执行此操作并运行 PHP 脚本时,它不起作用:

$rysncCommand = "rsync -avzhe ssh /var/www/folder1/file5 root@192.168.56.74:/var/www/folder2";
shell_exec($rysncCommand);

没有显示错误,所以我真的无法分辨错误是什么。我的 php 脚本有问题吗?

首先,您需要检查是否需要成为 root 或 (sudo 用户) 才能运行 rsync。

如果是,那么exec()命令只有在由同一用户在php-cli上运行(而不是由Apache用户在浏览器上运行)时才有效。 即您登录到 shell 以进行运行rsync的用户

如果是 root 或任何具有 sudo 权限的用户,那么当 php 脚本从浏览器运行时apache/www-data 这个rsync命令可能

不适用于正在工作的用户。

因此,您尝试创建一个普通用户并通过它登录,然后尝试rsync如果您成功了,那么看看其他问题可能是什么可能会很有趣,但是如果您被拒绝访问/权限,那么显然您至少无法在浏览器上运行此脚本。

除此之外,还有一件事权限可能与命令本身没有直接关系rsync而是与正常情况下由 root 用户拥有的文件夹/etc/test/相关。

有关更多详细信息,您可以查看此 堆栈溢出链接 .