我有一个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()
函数在正确的目录中运行脚本。
答案 0 :(得分:1)
如果从Web浏览器调用具有exec()的php程序,它将以www用户身份执行。因此,www用户可能没有权限连接/同步到远程主机。这就是为什么它在localhost上工作并在远程主机上失败的原因。
所以一个解决方案是
1)将命令保存为bash脚本
2)设置uid位(可以是root用户或具有足够权限的用户)
3)通过exec执行该bash脚本,使其以普通用户的身份运行
4)你应该ip限制你的程序,因为setuid是危险的。