我在尝试使用shell_exec()函数通过php运行以下脚本时遇到问题。
#!/bin/bash
/usr/bin/sshpass -p 'password' /usr/bin/rsync -avzhe -O
"ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -p port"
--exclude '*html' --include='R*' --exclude '*'
username@ipaddress:/location/ /location
当我在终端或通过php shell_exec()运行此脚本时,我收到以下错误:
Unexpected remote arg: username@IP:/location/
rsync error: syntax or usage error (code 1) at main.c(1201) [sender=3.0.6]
如果我从rsync部分删除'-O'它在终端中工作正常但是通过php我得到以下错误:
rsync: failed to set times on "/destination_location/.": Operation not permitted (1)
rsync: mkstemp "/location/.file.pSnb11" failed: Permission denied (13)
rsync: mkstemp "/location/.file.hR7VUM" failed: Permission denied (13)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [generator=
下面是php代码。
<?php
if (isset($_POST['button']))
{
shell_exec('/location/rsync.sh');
}
?>
<html>
<body>
<form method="post">
<p>
<button name="button">Run Script</button>
</p>
</form>
</body>
答案 0 :(得分:1)
正如其他人所建议您可能面临权限问题,因为当您通过网络服务器运行代码时,网络服务器的运行方式与root
不同。
您可以通过首先确定您的网络服务器运行的用户来模拟php调用。例如,在Ubuntu上,这是www-data
。
然后,您可以使用命令行中的sudo
来测试呼叫sudo -u www-data my-bash-script
。您应该能够以这种方式解决权限问题,然后您可以通过php和您的网络服务器再次尝试。