Debug di shell_exec
23/09/2020Fare il debug di uno script lanciato attraverso chiamata da un altro script talvolta è molto complicato non potendo visualizzare l'output di errore.
Praticamente, se ho una pagina che lancia uno script php la cui esecuzione richiede molto tempo (classicamente un pulsante che da il via ad un invio email massivo intervallato da pause tra un invio e il successivo) è prassi lanciare lo script attraverso shell_exec che esegue il comando da shell in modo che l'invio avvenga in background e non sia necessario attendere la fine dell'intero invio per visualizzare una pagina di risposta.
Se l'invio, o le altre operazioni previste dallo script, non vanno a buon fine la cosa migliore è visualizzare un output per analizzare l'ccaduto (meglio ancora attivando tutti i sistemi di visualizzazione errori previsti da php).
Esempio, questa è la chiamata nella nostra pagina:
shell_exec('php invia_mail.php > /dev/null &');
Se invia_mail.php si interrompe per qualche errore shell_exec ritorna null e quindi non abbiamo modo di debuggare.
Ma se modifichiamo temporaneamente:
$output = shell_exec('php invia_mail.php');
echo "<pre>" . $output . "</pre>";
al termine dell'esecuzione da shell abbiamo a video l'output che ci evidenzia tutte le problematiche!