выполнение скрипта из php файла - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть php-файл, который вызывается веб-сайтом:

пример: serial_tx.php? V = W100

В php я записываю файл журнала, в котором я вижу, какая строкаv Я получил (W100 в данном случае).

Веб-сервер размещен на Raspberry Pi и должен отправить эти данные в uart.

Расположение файлов:

/SCRIPTS/serial_tx.php
/SCRIPTS/c/jmsend/serial_tx  // the executable, compiled from a C script

Если я нахожусь в корне веб-сервера и с консоли моего Pi я запускаю

sudo /var/www/html/SCRIPTS/c/jmsend/serial_tx W100

Я получаю команду, отправленную правильно.

С файлом php, который я пробовалс system, shell_exec и exec без успеха.

shell_exec("sudo /var/www/html/SCRIPTS/c/jmsend/serial_tx ".$ric);

$ric - полученная команда.Я тоже пробовал с разными настройками пути (начиная с корня Pi или корня веб-сервера).Все файлы имеют разрешения 777.

1 Ответ

0 голосов
/ 21 сентября 2018

Что-то вроде этого в /etc/sudoers должно работать, чтобы позволить вашему веб-серверу без проблем выполнить эту конкретную команду:

Cmnd_Alias SERIAL = /var/www/html/SCRIPTS/c/jmsend/serial_tx *
www-data ALL=(ALL) NOPASSWD: SERIAL

Обратите внимание, что must escape userвведите перед его использованием:

$ric = escapeshellarg($_GET["v"]);
shell_exec("sudo /var/www/html/SCRIPTS/c/jmsend/serial_tx $ric");

Вы также должны знать о различиях между exec() и shell_exec(), особенно в том, что вы не можете проверить наличие ошибок с помощью shell_exec().

$ric = escapeshellarg($_GET["v"]);
exec("sudo /var/www/html/SCRIPTS/c/jmsend/serial_tx $ric", $output, $return);
if ($return !== 0) {
    // let the user know something didn't work
}

Это предполагает, конечно, что ваш исполняемый файл написан так, чтобы возвращать соответствующие коды ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...