2013-03-06 3 views
0

Одна из моих команд командной строки не выполняется, несмотря на то, что другие похожие строки работают. Я работаю на Linux-машине с использованием ОС Ubuntu 12.04. Я тоже пытался использовать exec, но не работает.Оператор PHP exec не выполняет определенную команду

У меня на самом деле это работало в какой-то момент, где я столкнулся с проблемой подвески (ожидая вывода команды), поэтому я перенаправляю вывод в/dev/null. Так вот, где в развитии что-то изменилось. Мы создали пакет debian для установки, и я запустил этот установочный пакет, поэтому я подумал, что, возможно, переписывая файл, разрешения были изменены, поэтому я добавил чтение/запись/выполнение всем пользователям/группам/владельцам, но это не сработало ,

Код здесь:

if(isset($_POST['activateXML'])) 
{ 
    if (videoConsistencyCheck()) 
    { 
     `cp {$fileXML} /apps/video/xml.xml`; 
     `sudo /apps/video/vsss restart >/dev/null 2>&1 &`; 
     systemUnvalidate(); 
     header('Location: index.php?app='.$_GET['app']); 
     die(); 
    } 
} 

Я знаю, что первая строка в заявлении, если запускается на выполнение. Строка кода отлично работает на самом деле, так что это тоже не проблема. Я сделал много Googling, и все, что я мог найти, это вопрос без ответа, любые советы были бы полезными.

EDIT: так, что, казалось, не работает, на самом деле вызов команды, как предполагалось, но в сценарии Баша я звоню старт-стоп-демон не работает

EDIT 2: Я сделал файл PHP теста и запустил код с терминала, исправил ошибку start-stop-daemon, добавив sudo в команды, но он по-прежнему не работает в моем коде. Я вызываю этот код при нажатии кнопки отправки.

+0

Имеет ли исполняемый пользователь PHP права на выполнение на '/ apps/video/vsss'? –

+0

Как указано выше, я выполнил 'sudo chmod a + rwx/apps/video/vsss'. Вы предлагаете мне добавить новых пользователей? и если да, то каким образом я могу определить пользователя, который будет использовать PHP-код? Кажется, что это будет случай, когда у него просто нет разрешений на выполнение. – xsdf

+0

Какой у вас индикатор того, что он не работает? Что происходит? –

ответ

0

Проблема заключается в вызове двоичного файла в скрипте vsss, который может выполняться только с правами root. Мы не хотели разрешать доступ к этому двоичному файлу только кому угодно. Решение, которое мы придумали, включает вызов chmod + s на скрипте vsss, который разрешает разрешения для идентификаторов пользователей и групп, но сохраняет разрешения владельца. Затем мы добавили пользователя PHP, который был www-данными, в файл sudoers, используя параметр NOPASSWD. В моем PHP код, который я тогда использовал строку:

exec('sudo /apps/video/vsss restart >/dev/null 2>&1 &') 

В shell_exec()/обратные кавычки не будет работать с этим методом.

0

использование дополнительных параметров, особенно выход: exec ($ command, $ output); var_dump ($ output); , чтобы определить, что может быть неправильно с вашей командой. Если это не сработает, сообщите нам свой код, в котором вы используете ваш exec.

+0

Я пробовал, не перенаправляя вывод, конечно, и выходная переменная имеет значение null. – xsdf

+0

Мне пришлось писать в файл, потому что код выполняется только в кнопке отправки, что затрудняет чтение вывода. Но это было действительно выходным. – xsdf

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