giovedì 30 aprile 2020

Eseguire un processo per lungo tempo con PHP

Oggi quasi tutti i gli hosting providers utilizzano Cloudflare per utilizzare al meglio le risorse dei server.
Cloudflare però aspetta la risposta del server per massimo 100 secondi dopo di che va in errore 524 di timeout.
Se devi eseguire uno script che richiede più di quel tempo non puoi farci nulla, non c'è modo che Cloudflare ti abiliti un tempo più lungo, tranne che sugli account Enterprise ... ma noi non siamo il capitano Kirk e nemmeno Spock ...

Un modo per bypassare questo limite è quello di eseguire uno script in PHP con quello che io definisco "fire and forget". Cioè lanciamo lo script e ritorniamo subito la risposta al server, lasciando lo script in esecuzione in backuground.

Come farlo? Ma con uno script in PHP ovviamente!
Solo che dobbiamo aver cura di gestire due script. Il primo sarà quello richiamabile dall'esterno ed il secondo sarà lo script eseguito in background.

Esempio:

Script da eseguire in background per un lungo periodo:


Script luuuungo:
// script1.php
<?php
    sleep(200);
    echo "faccio tante cose";
    sleep(1000);
    echo "perdo molto tempo";
?>


Script che viene eseguito tramite get di URL e che esegue lo script di sopra:
// script2.php
<?php
     exec("php script1.php > /dev/null &");
     echo "ho finito subito! il lavoro intanto sta procedendo";
?>


(-;

Nessun commento: