Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

PHP i Unix domain socket - nie mogę doszukać się błędu...



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> PHP
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
atlantis86



Dołączył: 22 Kwi 2014
Posty: 12

PostWysłany: Pon Kwi 11, 2016 7:12 pm  OP    Temat postu: PHP i Unix domain socket - nie mogę doszukać się błędu... Odpowiedz z cytatem Pisownia

Na wstępie pragnę uprzedzić, że nie mam wielkiego doświadczenia z PHP - to jeden z moich pierwszych projektów. Sprawa wygląda następująco:

Na moim Raspberry Pi działa sobie daemon, który nasłuchuje na pewnym porcie w oczekiwaniu na pakiety UDP, z informacjami od paru czujników (głównie PIR) zbudowanych przeze mnie w oparciu o AVR-y i kontrolery Ethernetu ENC28J60. Po przyjściu takiego pakietu wysyłany jest komunikat na mój telefon przez Pushovera.
Oczywiście przewidziana jest też możliwość wyłączenia alarmów - w osobnym wątku działa prosty serwer na sockecie "Unix domain". Ta część na razie oferuje podstawową funkcjonalność - obsługiwany jest tylko jeden klient na raz. Po wysłaniu właściwej komendy jest ustawiana lub kasowana zmienna globalna, informująca główną część programu o tym, jak ma się zachować. Istnieje też możliwość odczytania obecnego statusu. Wspomniana zmienna jest rzecz jasna zabezpieczona mutex-em. Daemon poprawnie współpracuje z nc, więc nie sądzę, żeby to on powodował problemy. Jeśli jednak nikt nie doszuka się problemu w poniższym kodzie PHP, mogę zamieścić także jego źródło.

Ostatnio postanowiłem dopisać prosty interfejs webowy, który wyświetlałby obecny stan alarmu oraz pozwalał na jego zmianę. Niestety - coś jest nie tak. Wyświetlenie statusu działa, ale próba przełączenia powoduje zawieszenie przeglądarki, która bez efektu próbuje wczytywać odświeżoną stronę. Daemon w tym momencie przestaje odpowiadać (tylko jeden klient).

Nie wyświetlają się żadne z zaprogramowanych komunikatów o błędzie Czyżby socket wymagał jakiejś konfiguracji? Ktoś ma pomysł, co może być nie tak?

Kod:

<hmtl>
<head></head>
<body>

<?php
if(!($socket=socket_create(AF_UNIX, SOCK_STREAM, 0))) {
    $errorcode=socket_last_error();
    $errormsg = socket_strerror(errorcode);
    die("Couldn't create socket: [$errorcode]  $errormsg");
}

if(!(socket_connect($socket, "/var/tmp/pirsocket", 0))) {
    $errorcode=socket_last_error();
    $errormsg = socket_strerror(errorcode);
    die("Couldn't connect: [$errorcode]  $errormsg");
}
if (isset($_GET['action'])) {
    if ($_GET['action']=='enable') {
        $command = "pir enable\n";
    }
    elseif ($_GET['action']=='disable') {
        $command = "pir disable\n";
    }
    else {
        die("Wrong command");
    }

    if(!socket_send($socket, $command, strlen($command), 0)) {
        die("Couldn't send");
    }
}
$command = "pir status\n";
if(!socket_send($socket, $command, strlen($command), 0)) {
    die("Couldn't send");
}
if (!socket_recv($socket, $response, 10, 0)) {
    die("Couldn't receive");
}
socket_close($socket);
echo "PIR sensor is ";
if ($response=="disabled\n") {
    echo "<font color=\"red\">not actiive</font><br><br>";
    echo "<form method=\"get\"><input type=\"hidden\" name=\"action\" value=\"enable\"><input type=\"submit\" value=\"Activate\"></form>";
}
elseif ($response =="enabled\n") {
    echo "<font color=\"green\">active</font><br><br>";
    echo "<form method=\"get\"><input type=\"hidden\" name=\"action\" value=\"disable\"><input type=\"submit\" value=\"Deactivate\"></form>";
}
?>

</body>
</html>

Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> PHP Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.09525 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |