0

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

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

如果我在 shell 工作中运行代码,但在脚本 php 中不起作用,则其他指令如 'ls' 、'cd' 和其他 'classical' commando 工作。我使用 Fedora,也许我没有用户“Apache”使用字典 Freeradius 的权限。

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

更新:错误是:

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

好的,我发现了错误(可能),selinux 不允许执行此指令,如果我设置 selinix permessive 工作,如果启用则不起作用。终于成功了,我更改了用户 Httpd 的文件权限,然后指令运行。

4

1 回答 1

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 环境变量而无法找到二进制文件。尝试radzap在 exec 中指定绝对路径,例如/usr/bin/radzap.

于 2013-03-14T09:38:08.520 回答