PHP脚本点亮Raspberry Zero Pi W上的LED

时间:2018-06-21 13:37:21

标签: php linux raspberry-pi raspbian led

我对PHP不太了解,但是我想问一下我应该如何改进此脚本。

我将简要描述一下添加现有代码的屏幕截图。

Screenshot

首次按下Web按钮时,程序将使LED点亮。

必须满足的条件是,文件大小必须等于2个字节。当执行第一个条件时,将更大的4字节数字写入txt文件。

通过再次按下同一按钮,应该满足第二个条件,但是存在一个错误,即文件被覆盖,但是无法满足该条件,我也不知道为什么。

您不问某人哪里可能有问题,或者您将如何解决该问题?

这是代码的一部分:

    if(!file_get_contents("soubor.txt", 0)) {
            $soubor = fopen("soubor.txt","w+");
            $funkceled1 = 10;
            fwrite ($soubor, $funkceled1);
            fclose ($soubor);
        }

     if (isset($_GET['on1']) && file_get_contents("soubor.txt", 2)) {
                shell_exec("/usr/local/bin/gpio -g write 14 1");
                $soubor = fopen("soubor.txt","w+");
                $funkceled1 = 1000;
                fwrite ($soubor, $funkceled1);
                fclose ($soubor);
            }
     else if (isset($_GET['on1']) && file_get_contents("soubor.txt", 4)) {
                shell_exec("/usr/local/bin/gpio -g write 14 0");
                $soubor = fopen("soubor.txt","w+");
                $funkceled1 = 10;
                fwrite ($soubor, $funkceled1);
                fclose ($soubor);

2 个答案:

答案 0 :(得分:0)

您的代码可以通过以下方式重写:

$fileName = __DIR__.'/soubor.txt';
// if the file does not exist or does not contain '10' nor '1000', create it with default value '10'
if (!file_exists($fileName) || (file_get_contents($fileName) !== '10' && file_get_contents($fileName) !== '1000')) {
    file_put_contents($fileName, '10');
}
if (isset($_GET['on1']) && file_get_contents($fileName) === '10') {
    shell_exec("/usr/local/bin/gpio -g write 14 1");
    file_put_contents($fileName, '1000');
} else if (isset($_GET['on1']) && file_get_contents($fileName) === '1000') {
    shell_exec("/usr/local/bin/gpio -g write 14 0");
    file_put_contents($fileName, '10');
}

答案 1 :(得分:0)

我不知道您的gpio二进制文件的详细工作原理,但是也许除了写一个值之外,您还可以读取一个值?然后,您可以使这个超级简单:

// read the current state from gpio (if 'read' is an option )
$current_state = shell_exec('/usr/local/bin/gpio -g read 14');

if (isset($_GET['on1']))  {
    // if it's off, turn it on, otherwise off.
    $new_state = (($current_state == '0') ? 1 : 0);
    shell_exec('/usr/local/bin/gpio -g write 14 '.$new_state);
}