系统命令不在PHP中执行

时间:2014-03-12 13:58:44

标签: php shell command exec shell-exec

我有一个PHP脚本,其中一些系统命令运行正常而其他系统命令没有运行。可以将未运行的命令复制并粘贴到shell中,并运行得很好。

系统:OSX 10.9.2(一切都已更新)。

我尝试了许多不同的命令,如下所示。

反引号,exec()shell_exec()system()passthru()

此命令正常。

exec("drush si -y --db-url=mysql://user:pass@localhost:3306/dbname");

但是这些命令没有运行。

exec("drush sql-sync @remote.staging @dev.anme -y");
exec("git ls-remote --heads git@github.com:blablaname/name.git");

可以将未运行的命令复制并粘贴到shell中并运行良好。我确保使用getcwd()函数在正确的目录中运行脚本。

1 个答案:

答案 0 :(得分:1)

如果从Web浏览器调用具有exec()的php程序,它将以www用户身份执行。因此,www用户可能没有权限连接/同步到远程主机。这就是为什么它在localhost上工作并在远程主机上失败的原因。

所以一个解决方案是

1)将命令保存为bash脚本
2)设置uid位(可以是root用户或具有足够权限的用户) 3)通过exec执行该bash脚本,使其以普通用户的身份运行 4)你应该ip限制你的程序,因为setuid是危险的。

setuid