从php文件执行脚本

时间:2018-09-21 20:06:01

标签: php exec

我有一个被网站调用的php文件:

示例:serial_tx.php?v = W100

在php内,我写了一个日志文件,可以看到我收到的字符串v(在这种情况下为W100)。

Web服务器托管在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

我正确发送了命令。

我使用系统,shell_exec和exec尝试的php文件没有成功。

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

$ric是收到的命令。 我也尝试了不同的路径设置(从Pi根目录或Web服务器根目录开始)。 所有文件的权限均为777。

1 个答案:

答案 0 :(得分:0)

/etc/sudoers中的类似内容应可以使您的Web服务器用户运行该特定命令而不会出现问题:

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

请注意,您必须 escape user input,然后再使用它:

$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
}

这当然假设您的可执行文件被编写为返回适当的错误代码。