2011-05-30 81 views
2

嗯,我有这个程序,我需要运行任何功能,但它位于我的dekstop(这个Ubuntu的11.04)。问题与执行()在PHP

我将它移动到/ home/Username,但没有骰子。

我跑

$blah = exec('sudo | echo mypassword | /home/server1/program commandhere', $test); 
var_dump($test); 
var_dump($blah); ?> 

输出是什么。

我被告知如果我想通过sudo运行它,我需要将www-data的Apache用户添加到sudoers列表中,我添加了它,但没有再次运气。 基本上,我已经尝试了很多东西,它只是不会运行。为什么?

编辑: 如果我把它粘贴到终端,它工作得很好,只是不与exec,系统或passtrhu。

+0

你为什么管道'sudo'到'echo'的输出? – 2011-05-30 01:24:31

+0

因为当你做sudo程序时会要求你输入密码,所以在做sudo之前你不要输入密码。 – dikidera 2011-05-30 02:03:41

+0

你调用'sudo'的方式确实不起作用。为了测试,试试这个:'sudo | echo mypassword |回声测试>/test.txt'。它会显示一个'Permission denied'错误。尽管如此,确保你最近没有使用'sudo',因为这会缓存你的凭证并且会改变测试结果。 – rid 2011-05-30 02:26:37

回答

2

使用echo mypassword | sudo -S代替注释掉以下行。

这也取决于哪个用户具有sudo权限。如果您想从apache进程运行此操作,则还需要授予apache用户sudo的权限。

而且,我只想澄清,命令应该是:

echo mypassword | sudo -S /home/server1/program commandhere 
+0

即使如此,该程序不会执行..或至少没有打印任何内容,因为它应该是。还有很多要打印的数据。 – dikidera 2011-05-30 02:02:12

+0

更新了答案。 – rid 2011-05-30 02:05:32

+0

对不起,它不工作。程序应该打印大量的数据,根据exec它应该存储打印在变量中的每一行,但没有任何内容。所以我假设程序从未被执行过。 – dikidera 2011-05-30 02:11:14

0

查看您的安全日志。不知道它在Ubuntu上的位置,可能是/ var/log/secure或/ var/log/messages。我敢打赌,你会发现类似于sudo requires a TTYsorry, you must have a TTY to run sudo的消息,表明sudo被配置为在没有真正的交互式shell的情况下无法工作。也就是说,sudo将不允许您在脚本中使用它或被外部程序调用。

我最近在尝试将Gnome键盘快捷键绑定到sudo命令时自己处理了此问题。

如果是这样的话,你需要在/etc/sudoers

#Defaults requiretty 
+0

不,我只有env_reset。它只是没有工作...程序没​​有被执行。 – dikidera 2011-05-30 02:00:50