Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    13

    Eseguire il codice di una pagina

    Salve a tutti,

    scusate il titolo sicuramente troppo generico ma non sapevo come descrivere il copntenuto.
    Ho un server che mi gestisce la domotica con cui interagisco tramite apache e semplici pagine in php.

    Mi nasce un problema quando tento di creare ed utilizzare una sorta di scenario, posto l'esempio:

    codice:
    <html>
    <body>
    <?php
    include ("connect1.php");
    $query1="UPDATE alix.scenari SET valore=1 WHERE scenario=1";
    $query2="UPDATE alix.scenari SET valore=0 WHERE scenario=1";
    $query3="SELECT valore FROM alix.devices WHERE id_cat = '17'";
    $query4="SELECT valore FROM alix.devices WHERE id_cat = '26'";
    $query7="SELECT valore FROM alix.devices WHERE id_cat = '28'";
    $risultati3=mysql_query($query3);
    $risultati4=mysql_query($query4);
    $risultati7=mysql_query($query7);
    $boilerdown=mysql_result($risultati3,0,"valore");
    $valvolaboiler=mysql_result($risultati4,0,"valore");
    $linea=mysql_result($risultati7,0,"valore");
    do {
    if($valvolaboiler==0){exec("/usr/bin/php5 /www/scripts/valv_boiler_on.php > /dev/null");}
    if($linea==0){exec("/usr/bin/php5 /www/scripts/chil_on.php > /dev/null");}
    mysql_query($query1);
    } while ($boilerdown <= 35);
    exec("killall -9 -q /bin/sh /home/attiva_scenario1.sh &");
    exec("/usr/bin/php5 /www/scripts/valv_boiler_off.php > /dev/null");
    exec("/usr/bin/php5 /www/scripts/chil_off.php > /dev/null");
    exec("/bin/sh /home/conf/notifica_scen1.sh > /dev/null");
    exec("/usr/bin/php5 /www/scripts/scen1_off.php > /dev/null");
    mysql_query($query2);
    mysql_close();
    ?>
    <div align="center">Scenario Boiler ESEGUITO.</div>
    <META HTTP-EQUIV='refresh' CONTENT='1; /cgi-bin/Index10.php'>
    </body>
    </html>
    Il codice sopra in pocche parole accende il riscaldamento, apre la valvola del boiler e verifica che la temperatura della parte bassa sia uguale o inferiore a 35 C, quando questa condizione non risulta piu' vera (quindi superiore a 35 C) esegue il codice dopo il ciclo while e provvede a chiudere la valvola e spegnere il riscaldamento.

    Ora quando sulla pagina web io clicco sul link che porta a questa pagina il browser non restituisce alcun risultato perche' logicamente deve eseguire tutto il suo codice.


    Mi domandavo se esiste il modo di mettere la pagina in esecuzione e restituire la pagina web principale dove con un opportuna verifica io posso inserire poi la disattivazione in caso voglia terminare tutto prima.


    Grazie

  2. #2
    non ti basta fare un redirect in coda alle interrogazione al DB, al posto di stampare i messaggi di cortesia?

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    13
    Potresti essere più chiaro per favore?

    Magari con un piccolo esempio.

  4. #4
    Codice PHP:
    <?php
    include ("connect1.php");
    $query1="UPDATE alix.scenari SET valore=1 WHERE scenario=1";
    $query2="UPDATE alix.scenari SET valore=0 WHERE scenario=1";
    $query3="SELECT valore FROM alix.devices WHERE id_cat = '17'";
    $query4="SELECT valore FROM alix.devices WHERE id_cat = '26'";
    $query7="SELECT valore FROM alix.devices WHERE id_cat = '28'";
    $risultati3=mysql_query($query3);
    $risultati4=mysql_query($query4);
    $risultati7=mysql_query($query7);
    $boilerdown=mysql_result($risultati3,0,"valore");
    $valvolaboiler=mysql_result($risultati4,0,"valore");
    $linea=mysql_result($risultati7,0,"valore");
    do {
    if(
    $valvolaboiler==0){exec("/usr/bin/php5 /www/scripts/valv_boiler_on.php > /dev/null");}
    if(
    $linea==0){exec("/usr/bin/php5 /www/scripts/chil_on.php > /dev/null");}
    mysql_query($query1);
    } while (
    $boilerdown <= 35);
    exec("killall -9 -q /bin/sh /home/attiva_scenario1.sh &");
    exec("/usr/bin/php5 /www/scripts/valv_boiler_off.php > /dev/null");
    exec("/usr/bin/php5 /www/scripts/chil_off.php > /dev/null");
    exec("/bin/sh /home/conf/notifica_scen1.sh > /dev/null");
    exec("/usr/bin/php5 /www/scripts/scen1_off.php > /dev/null");
    mysql_query($query2);
    mysql_close();

    header('location: pagina_di_ricasco.php');
    ?>
    Ad ogni modo, ricontrollando bene il codice, mi viene di farti una domanda.
    Ma sei sicuro che non puoi inglobare tutte quelle query in una unica o al massimo in un paio?

    Per esempio, qualcosa come:
    Codice PHP:
    SELECT 
       valore 
    AS boilerdown,
       
    valore AS valvolaboiler,
       
    valore AS linea
    FROM 
       alix
    .devices 
    WHERE 
       id_cat 
    IN 
      
    (172628
    L'ho scritta qui senza provarla, ma secondo me funzionerebbe!
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    13
    Grazie del consiglio per le query, ma per il problema descritto nel post non ci siamo, va bene che alla fine mi ridara' la pagina che richiami con l'header

    Codice PHP:
    header('location: pagina_di_ricasco.php'); 
    Ma li ci arrivera' solo dopo aver terminato il ciclo while

    Codice PHP:
    do { 
    if(
    $valvolaboiler==0){exec("/usr/bin/php5 /www/scripts/valv_boiler_on.php > /dev/null");} 
    if(
    $linea==0){exec("/usr/bin/php5 /www/scripts/chil_on.php > /dev/null");} 
    mysql_query($query1); 
    } while (
    $boilerdown <= 35); 
    Il problema che la pagina rimane bianca fino a quando il codice sopra non sara' eseguito quindi anche 40 minuti ad esempio, io chiedevo come ovviare a questa attesa

  6. #6
    Ecco questo non lo avevo capito.
    Una semplice gif animata non potrebbe fare al caso tuo?
    Intendo tipo i pre-loader che vedi nelle pagine che usano pesantemente AJAX.
    Una domanda: non rischi che ti vada in timeout lo script?
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2001
    Messaggi
    13
    Si non ricordo quale sia il timeout per gli script, ma per il momento non me lo ha fatto anche se è stato utilizzato solo due volte.

  8. #8
    Allora ricordati due cose:
    1. usa la funzione SET_TIME_OUT() con parametro 0 per evitare il blocco dello script. Di default è impostato a 30 secondi, e se non puoi accedere al PHP.INI perché non sei amministratore del server dove gira PHP, questo è l'unico modo per evitare il blocco dello script (quando ha un tempo variabile che può superare i 30 secondi famosi).
    2. visto che mandi in echo una immagine di cortesia (il pre-loader), ricordati che header() non funzionerebbe.
    Devi o usare un redirect in javascipt, oppure usare OB_START() e funzioni correlate per mandare in buffer il contenuto HTML e non far bloccare HEADER().

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Oppure.... devi usare pesantemente AJAX e le richieste asincrone per mandare in esecuzione lo script e lanciare messaggi di cortesia agli utenti se l'esecuzione fosse lunga!

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.