2013-03-14 152 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