通过PHP进行Bash脚本

时间:2014-03-05 22:00:40

标签: php bash

我在尝试使用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>

1 个答案:

答案 0 :(得分:1)

正如其他人所建议您可能面临权限问题,因为当您通过网络服务器运行代码时,网络服务器的运行方式与root不同。

您可以通过首先确定您的网络服务器运行的用户来模拟php调用。例如,在Ubuntu上,这是www-data

然后,您可以使用命令行中的sudo来测试呼叫sudo -u www-data my-bash-script。您应该能够以这种方式解决权限问题,然后您可以通过php和您的网络服务器再次尝试。