PHP Script ruft PHP Script auf mit Variable Übergabe

  • Ich habe ein Script Getstate_Gpio_Alle.php das aufgerufen wird mit Übergabe einer Variablen $_GET.

     $variable_alle = $_GET["alle_roll"];

    In ein Script wird die Variable übergeben als:

    Code
       function alle_roll( alle_roll )
       {
            fetch( `getstate/Getstate_Gpio_Alle.php?alle_roll=${alle_roll}` )
             .catch( error => alert(error) ) ;
       }

    Das funktioniert auch alles wunderbar.
    Zusätzlich habe ich jetzt noch ein Script, das die Getstate_Gpio_Alle.php auch aufrufen soll.
    Das ist die Datei sonne.php.

    Code
    $alle_roll = "2";
    shell_exec("php /var/www/html/rollor/getstate/Getstate_Gpio_Alle.php?alle_roll=$alle_roll");.
    Code
    shell_exec("php /var/www/html/rollor/getstate/Getstate_Gpio_Alle.php?alle_roll=2");

    Beides funktioniert nicht. Wenn ich die Variable in der Getstate_Gpio_Alle.php fest vergebe und den Link ohne Variable aufrufe dann geht es.
    Was mache ich falsch bei der Variable Übergabe. Habe auch Google schon befragt, was auch kein erfolg brachte.

  • PHP Script ruft PHP Script auf mit Variable Übergabe? Schau mal ob du hier fündig wirst!

  • Lange nichts mehr damit gemacht, aber IMHO musst Du das als Argument übergeben, wenn Du das Skript im CLI aufrufst. Also das Fragezeichen weg lassen, in etwa so

    Code
    shell_exec("php /var/www/html/rollor/getstate/Getstate_Gpio_Alle.php alle_roll=$alle_roll");

    Ungetestet!

    Sieh hier mal genauer nach: https://www.php.net/manual/en/features.commandline.php

  • Sorry, das war nicht ganz richtig! Der Aufruf wäre etwa so:

    Code
    shell_exec("php /var/www/html/rollor/getstate/Getstate_Gpio_Alle.php $alle_roll");

    und im Skript dann

    PHP
    <?php
    
    $alle_roll = $argv[1];
    echo $alle_roll;
    
    ?>

    Auch ungetestet!

    Hier noch ein Link: https://www.php.net/manual/en/reserved.variables.argv.php

  • Mmh, fehlt da nicht noch ein -f?

    Code
    shell_exec("php -f /var/www/html/rollor/getstate/Getstate_Gpio_Alle.php $alle_roll");
    Code
    php --help
    Usage: php [options] [-f] <file> [--] [args...]
    -f <file>        Parse and execute <file>.
    args...          Arguments passed to script. Use -- args when first argument
                      starts with - or script is read from stdin

    Wenns ner net G'wittern tun tut.

  • Bergwichtel Das ist ja in eckigen Klammern. <file> wird auch ohne ausgeführt:

    Code
    bj@s8n:~$ cat test.php
    <?php
    print_r(exec("python3 -c 'print(42)'") . "\n");
    bj@s8n:~$ php test.php
    42
    bj@s8n:~$ php -f test.php
    42

    “Don't put your trust in revolutions. They always come around again. That's why they're called revolutions. People die, and nothing changes.” — Terry Pratchett, Night Watch

  • Erst einmal Danke für die Info´s
    Nur das bringt mich leider nicht weiter, denn es greifen mehrere Scripte auf Getstate_Gpio_Alle.php zu.
    Die mit Getstate_Gpio_Alle.php übernommen werdden.
    Gibt es nicht eine andere Lösung, damit ich die Getstate_Gpio_Alle.php nicht umschreiben muß?

  • Ich habe mir das Eingangsposting nochmal angeschaut.

    Wenn ich das richtig interpretiere, nutzen alle Skripte, außer sonne.php die Funktion alle_roll( alle_roll ).
    In sonne.php willst Du mit shell_exec() aufrufen. Warum nimmst Du nicht auch die Funktion?
    Jetzt hast Du ja nichts über Deine Skripte verraten. Werden da Dateien (z.B. die mit der Funktion) includiert oder sind die in jedem Skript notiert, etc.)
    Mit dem Wissen, wie Deine Skripte funktionieren, kannst auch nur Du die Lösung finden.

    Wenns ner net G'wittern tun tut.

  • Ja das ist richtig . Alle Scripte rufen wie in Post 1 beschrieben das Getstate_Gpio_Alle.php auf.

    Dieses Script wird über verschiedene Button gestartet

    Code
    $alle_roll = "2";
    <script>
       function alle_roll( alle_roll )
       {
            fetch( `getstate/Getstate_Gpio_Alle.php?alle_roll=${alle_roll}` )
             .catch( error => alert(error) ) ;
       }
    </script>

    Desweiteren soll wenn Sonnenuntergang = aktuelle Uhrzeit ist, das Script Getstate_Gpio_Alle.php auch aufgerufen werden.

    Die sonne.php bin ich erst am Erstellen. Da ich Probleme habe, habe ich bis jetzt nur den Aufruf im Script.
    Dort sollen die einzelne Scripte aufgerufen werden. Was beim Sonnenuntergang passieren soll.
    Wie Rollor schließen und einige Lampen ein schalten.

    PHP
    <?php
    // Ermitteln des Wochentag
      setlocale(LC_TIME, 'de_DE', 'de_DE.UTF-8');                                   // Deutsches Datum einstellen
    //echo strftime("%A, %d. %B %Y");
      $WO = strftime("%A");                                                         // aktueller Wochentag ermitteln
    
    $alle_roll = "2";
    shell_exec('php /var/www/html/rollor/getstate/Getstate_Gpio_Alle.php $alle_roll'); 

    Gibt es hierfür eine Lösung, denn ich möchte nicht gerne die anderen Scripte umschreiben ?

  • Irgendwie verstehe ich nicht, was Du erreichen willst (generell, nicht auf die Skripte bezogen).

    Soll die Rollor geöffnet/geschlossen werden, wenn ein Ereignis eintritt? Oder willst Du nur den Status (über den Webserver) haben und dann selbst entscheiden, was geöffnet oder geschlossen (über den Webserver) werden soll?

    Welche Rolle spielt die Datenbank? Wenn ich das richtig interpretiere, möchtest Du ja den aktuellen Status und danach Aktionen auslösen.

    Für das, was ich vermute (Automatisch mit Eingriffsmöglichkeit), wäre eigentlich ein Shellskript (oder von mir aus in einer anderen Sprache wie Python) sinnvoller. Natürlich mit der Option, den aktuellen Status über den Webserver anzuzeigen und auch steuern zu können.

    Ps: Bei Datum würde ich generell UTC verwenden und nur die für den Menschen zu lesende Ausgabe auf MEZ/MESZ formatieren. Nicht das bei der Umstellung Normalzeit/Sommerzeit es zu unerwarteten Effekten kommt.

    Wenns ner net G'wittern tun tut.

  • Bergwichtel

    Das Prinzip ist in etwa so:
    Die Rollor´s werden bei mir teilweise über ein Gpio-Port und über der Fritzbox gesteuert.
    Bei Sonnenauf bez. Sonnenuntergang öffnen bez. schließen die Rollor automatisch.
    Außerdem werden ein paar Fenster mit ein Lichtsensor überwacht und wenn die Sonne im Fenster scheint geht das entsprechende Rollor halb runter.
    Da mehrere Scripte den aktuellen Zustand der Rollor´s benötigen, habe ich dafür eine Datenbank eingerichtet.

    Möchte mich auch noch recht herzlich bedanken für eure Info. Haben mir sehr gehofen.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!