Allora, ho spostato la chiamata a contentLoop alla fine di content, per cui non ho più bisogno di passare niente in GET. Al massimo posso passare un ?exit=1 da contentLoop quando ritorno a content in modo da farlo chiudere subito.
Però se quando ritorno a content all'interno del while mi interrompe il contentLoop è inutile...
L'if mi serve per confrontare il time di inizio del contentLoop e vedere se è oltre i 30sec. vuol dire che content non è stato più chiamato.
es.
content.php:
Codice PHP:
<?php
if ($_REQUEST['exit'] == 1) exit;
....
//come ultima operazione (non ho bisogno di eseguire altro codice al ritorno):
if $_REQUEST("autoit") {
...
$_SESSION["loop"] = 0; // blocco il ciclo del contentLoop della vecchia chiamata e finisco l'esecuzione di contentLoop.php
Sleep(1);
$_SESSION["loop"] = 1; // setto a 1 per un nuovo ciclo
header("contentLoop.php"); //rieseguo contentLoop e riinizio il ciclo, ma il content dovrebbe terminare l'esecuzione e liberare l'output, invece... }
?>
es. contentLoop.php:
Codice PHP:
<?php
$_SESSION["timeOld"] = getdate(); // memorizzo quando è stato lanciato contentLoop
while ($_SESSION["loop"] == 1){
header("content.php?exit=1"); // ritorno a content.php ed esco subito, mentre contentLoop dovrebbe continuare, invece così me lo chiude...
$_SESSION["time"] = getdate(); // prendo il time attuale e controllo quanto tempo è passato dall'inizio della chiamata a contentLoop:
if ($_SESSION["time"]['seconds'] - $_SESSION["timeOld"]["seconds"] > 30 ) {
// se siamo arrivati qui vuol dire che content.php non è stato chiamato per 30sec e quindi non ha chiuso il ciclo contentLoop da 30 secondi, quindi eseguo l'operazione prevista.
}
sleep(1); // per non appesantire il while (serve?)
}
?>
Chiaramente il redirect non funziona in questo caso...
Praticamente contentLoop dovrebbe contare da quanti secondi è avvenuta l'ultima chiamata a content.php ed eseguire un codice se supera i 30sec. E non bloccare content.php che deve chiudersi e liberare il client che lo chiama ogni 5sec.
Curl asincrono non l'ho mai usato, dici che potrebbe risolvere?
Un alternativa sarebbe il crontab, ma sono su hosting Windows, non so in che modo si può fare (e se me lo lasciano fare...), ma se si potesse, farei eseguire ogni 30sec un php che mi controlla una var di sessione in cui ho messo il time dell'ultima chiamata a content. Così sarebbe molto più semplice, ma...