我正在尝试将文件从本地服务器同步到远程服务器。 当我在控制台上执行此操作时,它有效:
rsync -avzhe ssh /var/www/folder1/file5 [email protected]:/var/www/folder2
但是当我在我的 php 上执行此操作并运行 php 脚本时,它不起作用:
$rysncCommand = "rsync -avzhe ssh /var/www/folder1/file5 <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="99ebf6f6edd9a8a0abb7a8afa1b7acafb7aead" rel="noreferrer noopener nofollow">[email protected]</a>:/var/www/folder2";
shell_exec($rysncCommand);
没有显示错误,所以我无法真正判断错误是什么。我的 php 脚本有问题吗?
最佳答案
首先,您需要检查您是否需要成为 root 或(sudo 用户)才能运行 rsync。
如果是,则 exec() 命令仅在由同一用户在 php-cli
上运行时才有效(而不是由 Apache 用户在浏览器上运行)。即您登录到 shell 来运行 rsync 的用户。
如果是 root 或任何具有 sudo 权限的提升权限用户,则此 rsync
命令可能不适用于在 php 运行时的 apache/www-data
用户脚本从浏览器运行。
所以你尝试创建一个普通用户并通过它登录,然后尝试rsync
如果你成功了那么看看其他问题可能会很有趣,但是如果你获得访问权限/权限被拒绝那么显然你至少不能在浏览器上运行这个脚本。
除此之外,还有一件事权限可能与 rsync 命令本身不直接相关,而是与正常情况下 root 用户拥有的文件夹 /etc/test/
相关。
有关更多详细信息,您可以查看此 Stack Overflow Link .
关于php exec() rsync ssh 到远程服务器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30772816/