切换到exec shell脚本

时间:2016-10-24 20:16:31

标签: php jquery shell

我正在尝试进行一些Toggle切换:当它关闭它会发送一些命令(IN1),如果它在它上面将发送另一个命令(IN2

命令通过shell脚本发送

我正在使用的是这样一个按钮:

<?php
if ($_GET['IN1']) {
  echo shell_exec("sudo sh /home/cubie/phpdemo/IN1.sh");
}
?>

<a href="?IN1=true">IN1</a>

但我发现了这个: http://www.w3schools.com/howto/howto_css_switch.asp

我想用它。但是我怎么能用Switch做同样的事情

IN1on

IN1off

===

一些编辑 好吧,现在我明白了。 我已经设置了

<link rel="stylesheet" type="text/css" href="style.css" />


<?php

function get_in1_status() {
    return shell_exec('cat  /sys/class/gpio/gpio19_pg7/value');
    /* return (boolean) */ }
/* return TRUE if you object is active ; else return FALSE */

function set_all_off() {
    shell_exec('java -cp /home/cubie/demo/ allinone 2'); 
    }

function set_all_on() {
    shell_exec('java -cp /home/cubie/demo/ allinone 1'); 
    }   

$current_value = get_in1_status();

?>


<label class="switch">
  <input type="checkbox" 
  <?php echo ($current_value == true ) ? 'checked="checked"' : null; ?>
  <?php
    if( $current_value == true ) {
    set_all_on();
    }
    else if($current_value == false){
    set_all_off();
    }
  ?>
  >
  <div class="slider round"></div>
</label>

1 个答案:

答案 0 :(得分:1)

如果要显示切换按钮,则需要获取对象的当前值。 你有办法得到它吗?

<?php

function get_in1_status() { /* return (boolean) */ }
/* return TRUE if you object is active ; else return FALSE */

function set_in1_on() { shell_exec('sudo sh /home/cubie/phpdemo/IN1.sh'); }

$current_value = get_in1_status();

?>
<label class="switch">
  <input type="checkbox" <?php echo ($current_value == true ) ? 'checked="checked"' : null; ?>>
  <div class="slider round"></div>
</label>
  

在get_in1_status上,您可以调用另一个将返回服务状态的.sh代码。您可以将此值存储在文件或数据库上,也不会有任何其他内容可以使您获得true / false值。

  

问题:好的。对于当前值,我可以在其他文件中获取它   / SYS /类/ GPIO / gpio19_pg7 /值   在值中它将是0或1所以我该怎么做?我想执行一个   脚本如果关闭,另一个如果它开关。 - Anmar Mashat

当然可以:) 如果值在文件上,请尝试例如:

<?php function get_in1_status() {
  return shell_exec('cat  /sys/class/gpio/gpio19_pg7/value');
}

在PHP中,1等于true(实际上, 0 false null 的任何值都是等于真)。 如果你想有一个明确的布尔值,可以强制$result = (boolean) 1;,所以$result将等于true:)

如果您想要特定文字:

<?php
echo (get_in1_status() ? 'on': 'off'); // will return 'on' or 'off' value
echo (get_in1_status() == true ? 'on': 'off'); // Same. will return 'on' or 'off' value
echo get_in1_status(); // will return the content on the value
echo (boolean) get_in1_status(); // will return 1 or 0


if( get_in1_status() ) {
    // if yes
}
else {
    // if no
}
?>

现在,你只需要选择。

基于你的工作:差不多:)但是开关的逻辑是不正确的。您需要检查值并使用事件更改它(例如:通过_GET捕获页面刷新,值)

请参阅:

  

如果代码不起作用,请尝试在get in1_status函数中注释第一个返回并取消注释第二个:)   如果它还没有工作......尝试另一个shell命令。什么是value?一份文件 ?一个程序?使用cat / echo或直接执行该行。

您的职能:

<?php

function get_in1_status() {
    return shell_exec('cat  /sys/class/gpio/gpio19_pg7/value');
    //return file_get_contents('/sys/class/gpio/gpio19_pg7/value'); // solution 2
}

function set_all_off() {
    shell_exec('java -cp /home/cubie/demo/ allinone 2');
}

function set_all_on() {
    shell_exec('java -cp /home/cubie/demo/ allinone 1'); 
}   

现在,活动。我抓到了一个&#39; in1&#39; _GET参数,我运行切换逻辑。 更多php代码:

<?php

// change the value
if( isset($_GET['in1']) ) { // if url contains 'in1' parameter
  switch($_GET['in1']) {
    case 'on': // ?in1=on
      set_all_off();
      break;

    case 'off': // ?in1=off
      set_all_on();
      break;

    default:  // ?in1 or ?in1=anything_else
        if( get_in1_status() )
          set_all_off(); // if true=on  -> switch off
        else
          set_all_on();  // if true=off -> switch ofn
      break;
  }
}

// get the current value
$current_value = get_in1_status();

?>

HTML :(这是一个示例。我在这里使用<a />元素。提示:提交表单以更改值或使用ajax动态执行此操作)< / p>

<a href="?in1">
  Default (switch):
  <label class="switch">
    <input type="checkbox" <?php echo ($current_value) ? 'checked="checked"' : null; ?> />
    <div class="slider round"></div>
  </label>
</a>

<br />

<a href="?ini=on">On</a> <a href="?ini=off">On</a>

(未经过测试的代码)