2013-03-14 2 views
0

У меня есть эта проблема: я хочу выполнить команду freeradius из инструкции php exec(), но она не работает. код прост:php shell_exec() команда freeradius

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

Если я запускаю код в работе оболочки, но в PHP скрипт doeesn't работы, другие команды, такие как «LS», «CD», а другой «классической» диверсионной работы , Я использую Fedora, может быть, у меня нет разрешений, как пользовательский «Apache» использовать словарь Freeradius.

Извините за мой английский, любые предложения? Спасибо

Update: ошибка:

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

Хорошо, я нашел ошибку (может быть), SELinux не permict выполнения этой инструкции, если я установить selinix permessive работу, если включить в не работает. Это, наконец, работа, я изменил права доступа к файлу для Httpd и инструкции.

+0

Просьба подробно остановиться на части вопроса «не работает». –

+0

Можете ли вы опубликовать скрипт php, который вы пытаетесь запустить? –

+0

Имеет ли пользователь PHP доступ к программе? – h2ooooooo

ответ

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.

+0

ok спасибо, ошибка si: radclient: dict_init: Не удалось открыть словарь «/ etc/raddb/dictionary»: Permission denied –

+0

спасибо, это selinux, который не может выполнить эту конкретную команду. –

Смежные вопросы