php aktualisieren verhindern

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    wenn ich diese Seite aktualisiere nachdem ich "öffnen" oder "schließen" drücke dann startet das Python-Programm nochmal...

    Wie kann ich denn das machen das die Python-Skripte nur über die Buttons aufgerufen werden?

  • Ist jetzt nur eine Vermutung, aber ID ist gesetzt. Teste es mal mit !empty:


  • Die Vermutung bleibt ne Vermutung - das ändert nix an der Problematic

    $_GET wird ja über die Adressleiste übergeben. Wenn man also die Seite reloaded wird der ?id=4.1 erneut übergeben und somit trifft isset(_$GET[id]) oder !empty(_$GET[id]) weiterhin zu
    Allerdings wäre nur ein !empty unsauber programmiert denn wenn das garnicht gesetzt ist würde das ständig Fehlermeldungen ins Log erzeugen - also wenn dann bitte auf isset prüfen oder eine kombination:
    if (isset(_$GET[id]) AND !empty(_$GET[id])) { ...

    Das gilt aber auch für $_POST -> Wenn man F5 drückt (page reload) werden die Daten erneut übermittelt


    Verhindern könnte man das imho indem man in der ProzessListe prüft ob das Script bereits ausgeführt wird (sofern es im Background weiter läuft) und wenn das der Fall ist ein erneutes ausführen verhindern

    Aber ich vermute mal dass das Script nur ein mal kurz ausgeführt wird und sich danach beendet? Dann wäre es sinnvoller eine temporäre Datei zu speichern und diese zu prüfen.
    Also zum Beispiel erzeugt man bei Tor_auf.py eine Datei: /tmp/tor_auf
    Wenn man dann auf den "öffnen" Link klickt würde das php Script prüfen "existiert die Datei /tmp/tor_auf ? Wenn ja -> Zeige an 'Tor ist bereits auf!' und schluss"
    Beim ausführen von Tor_zu.py müßte dann geprüft werden ob /tmp/tor_auf existiert, wenn ja diese löschen und dann /tmp/tor_zu erzeugen...

    Spoiler anzeigen


    [code=php]
    <html>
    <body>
    <table border="2px" align="center">
    <tr><td><a href="?id=4.1" target="_self">öffnen</a></td></tr>
    <tr><td><a href="?id=4.0" target="_self">schließen</a></td></tr>
    </table>

    <?php
    if (isset($_GET["id"]) AND $_GET["id"] == "4.1") {
    if (file_exists("/tmp/tor_auf")) { echo "<b>ERROR: Tor ist bereits offen!<b/>"; exit(); }
    touch("/tmp/tor_auf");
    if (file_exists("/tmp/tor_zu")) { unlink("/tmp/tor_zu"); }
    echo shell_exec("sudo /var/www/test/Tor_auf.py");
    } elseif (isset($_GET["id"]) AND $_GET["id"] == "4.0") {
    if (file_exists("/tmp/tor_zu")) { echo "<b>ERROR: Tor ist bereits geschlossen!<b/>"; exit(); }
    touch("/tmp/tor_zu");
    if (file_exists("/tmp/tor_auf")) { unlink("/tmp/tor_auf"); }
    echo shell_exec("sudo /var/www/test/Tor_zu.py");
    }
    ?>
    </body>
    </html>
    [/php]

  • Danke für die Hilfe.
    Es funktioniert soweit aber:
    Wenn ich das Tor über den Pi öffne und beispielsweise per Hand über die Fernbedinung schließe kann ich es über den Pi nicht mehr öffnen da ja in der temporären Datei steht das es geöffnet ist

  • Ja, das ist wohl so....
    Du könntest dem Pi Augen verpassen.

    Ok, keine Augen, aber Schalter, an denen er merkt ob das Tor auf oder zu ist.
    Denn Telepathie ist unter Raspberrys nicht so weit verbreitet.

    Ja, das ist wohl so....
    Du könntest dem Pi Augen verpassen.

    Ok, keine Augen, aber Schalter, an denen er merkt ob das Tor auf oder zu ist.
    Denn Telepathie ist unter Raspberrys nicht so weit verbreitet.

    spruch.png

    Einmal editiert, zuletzt von combie (23. Februar 2014 um 07:51)


  • Wenn ich das Tor über den Pi öffne und beispielsweise per Hand über die Fernbedinung schließe kann ich es über den Pi nicht mehr öffnen da ja in der temporären Datei steht das es geöffnet ist

    Tja woher soll der PI das dann auch wissen?

    Wie combie schon sagte müsstest du für diesen Fall dann Kontakte anbringen die der PI überprüfen/abfragen kann, zum Beispiel -> Wenn GPIO17 auf HIGH is ist das Tor zu, wenn GPIO17 offen also LOW dann ist das Tor offen.... Dementsprechend erweiterst du dann das PHP Script

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!