2014-03-12 58 views
0

我有一个php脚本,其中一些系统命令运行良好,而其他系统命令不运行。没有运行的命令可以复制并粘贴到shell中并运行得很好。系统命令不能在PHP中执行

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

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

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

此命令工作正常。

exec("drush si -y --db-url=mysql://user:[email protected]:3306/dbname"); 

但是这些命令不运行。

exec("drush sql-sync @remote.staging @dev.anme -y"); 
exec("git ls-remote --heads [email protected]:blablaname/name.git"); 

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

+0

为什么你认为这些命令“没有运行”?任何错误消息?您应该实施错误检测和处理,以便您知道发生了什么。至少你应该看看你的http服务器日志文件来读取错误消息,如果这些命令_really_没有执行,我怀疑。 – arkascha

+0

Btw:你确定你的PATH是正确的?尝试使用绝对路径来尝试执行这些命令。 – arkascha

+0

你的php.ini中的'disable_functions'的值是多少? – m79lkm

回答

1

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

所以一个解决方案是

1)命令保存为设置UID位bash脚本
2)(它可以是根或具有足够权限的用户)。
3)通过exec执行该bash脚本,以便它将作为previlged用户运行。
4)你应该限制你的程序,因为setuid是危险的。

setuid