Я не очень разбираюсь в PHP, но я хотел бы спросить, как мне улучшить этот скрипт.
Добавив скриншот моего существующего кода, я кратко опишу.
Программа заставляет светодиод включаться при первом нажатии веб-кнопки.
Должно быть выполнено условие, если задано, что размер файла должен быть равен 2 байтам. Когда выполняется первое условие, в текстовый файл записывается большее 4-байтовое число.
При повторном нажатии той же кнопки второе условие должно быть выполнено, но есть ошибка, что файл перезаписывается, но условие не может быть выполнено, и я не знаю, почему.
Разве вы не спрашиваете кого-то, где может быть проблема или как вы могли бы решить проблему, которую вы?
Вот часть кода:
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);
Ваш код может быть переписан следующим образом:
$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');
}
Я не знаю как твои 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);
}