我对PHP不太了解,但是我想问一下我应该如何改进此脚本。
我将简要描述一下添加现有代码的屏幕截图。
首次按下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);
答案 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);
}