我的论文中包括创建一个管理界面,其中一个
管理员可以批准要求访问权限的用户
OpenNebula.
经批准后,用户应加入OpenNebula(即它对应
命令oneadmin createuser username password). (More information
of the interface (section 4.2).)
我试图通过在a中执行shell命令来执行此操作
PHP文件.为什么这不起作用(下面只是一个具体的例子 – 不是我使用的一般代码)?
$execQuery = "/bin/su oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";
shell_exec ($execQuery); //execute query in shell.
这也不行(即使我以oneadmin登录,当时
脚本由PHP执行):
shell_exec ("/usr/bin/oneuser create test10 test10");
当我在shell中键入该命令时,它可以工作.
我试图通过PHP和那些工作执行其他shell命令
很好,所以我想知道问题出在哪里.
我已经为所有用户提供了文件/usr/bin/oneuser rwx权限.
解决方法:
在php manual for shell_exec上,它显示该函数将输出作为字符串返回.如果您希望从您启动的程序输出,您需要像这样捕获:
$execQuery = "echo -n test_command";
$output = shell_exec($execQuery);
echo $output;
您的问题并未显示尝试捕获任何数据.如果你还确保在运行命令时连接stdout和stderr,你应该更好地了解发生了什么.要使用您的示例:
$output = shell_exec("/usr/bin/oneuser create test10 test10 2>&1");
var_dump($output);
这应该可以帮助你了解发生了什么.在Shadur suggests,似乎这些程序可能期望一个可以输入密码以便运行的交互式终端.即使不需要输入,他们也可能期望交互式shell.而且他说su在这种情况下并不好看.但是,有一个正确的工具.
您可以设置sudo,以便您的http用户可以在没有密码的情况下以用户名执行您的程序,但无法通过运行visudo或您用来编辑sudoers文件和添加此行的任何内容来执行任何其他操作:
http ALL=(username) /usr/bin/oneadmin
然后在php中你的命令看起来像这样:
$execQuery = "sudo -u username /usr/bin/oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";
$out = shell_exec ("$execQuery 2>&1");
echo $out
标签:php,shell,shell-script
来源: https://codeday.me/bug/0814/1655978.html
如果觉得《关闭shell_exec php 使用shell_exec从PHP执行shell命令》对你有帮助,请点赞、收藏,并留下你的观点哦!