php exec() rsync ssh 到远程服务器不起作用

标签 php rsync

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

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/

相关文章:

linux - 如何温和地杀死rsync?

mysql - 在远程磁盘上创建脚本轮换备份

PHP - 正确检查 $_POST ['variable' ] 是否已发布

PHP 循环从记录号开始

file - 如果 rsync 正在备份的文件在此过程中被更新,它会如何表现?

Python Subprocess.Popen 从一个线程

php - MYSQL合并两个日期字段然后Order BY

php - Laravel 4 - DB::select 返回数组但未找到 $array[$key]

php - Laravel 5 本地化 : exclude/public/directory

permissions - rsync部署和文件/目录权限