我正在尝试将文件从本地同步到远程服务器。当我在控制台上执行此操作时,它可以工作:
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/
相关。
有关更多详细信息,您可以查看此 堆栈溢出链接 .