2013-03-14 132 views
0

我有这个问题:我想要从指令php exec()执行命令freeradius,但它不起作用。代码很简单:php shell_exec()freeradius命令

<?php 
    exec('radzap -x -N 192.168.0.1 localhost secret'); 
?> 

如果我运行shell工作的代码,但到脚本PHP doeesn't工作,其他指令,如“LS”,“CD”和其他“经典”突击队工作。 我利用Fedora,也许我没有权限如何用户'阿帕奇'利用字典Freeradius。

对不起,我的英语,有什么建议吗?谢谢

更新: 错误是:

dict_init: Couldn't open dictionary "/etc/raddb/dictionary": Permission denied 

好吧,我发现错误(也许),SELinux的不permict该指令的执行,如果设置了selinix permessive工作,如果是启用不起作用。 这是最后的工作,我改变了用户Httpd的文件权限和指令去。

+0

请详细说明问题的“不工作”部分。 – 2013-03-14 09:34:08

+0

你可以发布你正在尝试运行的php脚本吗? – 2013-03-14 09:37:09

+0

PHP用户是否可以访问该程序? – h2ooooooo 2013-03-14 09:42:11

回答

0

问题不仅在于命令失败,还在于你不知道它是如何失败的。 exec()不给你一大堆的信息本身,所以你需要捕获命令输出(包括标准误差):

$output = array(); 
$retcode = 0; 
exec('radzap -x -N 192.168.0.1 localhost secret 2>&1', $output, $retcode); 
echo "Return code: $retcode\n"; 
print_r($output); 

这给你的命令的返回码和输出,让您看看为什么命令失败。有太多可能的问题给你一个具体的答案。

话虽如此,命令失败的最常见原因是由于$ PATH环境变量导致无法找到二进制文件。尝试在exec中指定到radzap的绝对路径,例如/usr/bin/radzap

+0

好的,谢谢,错误si:radclient:dict_init:无法打开字典“/ etc/raddb/dictionary”:权限被拒绝 – 2013-03-14 10:19:01

+0

谢谢,selinux无法执行此特定命令。 – 2013-03-18 11:03:12