Chiama un altro script PHP e restituisci il controllo all'utente prima che l'altro script venga completato

In realtà sto cercando di applicare questo a uno script che invia email. La parte email di invio impiega alcuni secondi, che è troppo lunga. Quello che voglio è che il primo script faccia il suo lavoro e attivi un altro script (che manda l'e-mail), ma voglio che il primo script restituisca il controllo all'utente senza aspettare che il secondo script invii l'e-mail.

Opzioni che ho considerato:
Cron Job: Per questo dovrò fare eseguire un cron job qualcosa come each 2 minuti. Non fattibile!
Script PHP che triggers un job cron che si distriggers automaticamente una volta terminato : bene ok, ma come faccio? PHP può farlo?

Puoi anche call la shell e call manualmente il file PHP. Nessun cron richiesto e nessuna attesa.

http://www.php.net/manual/en/function.exec.php

Dalla sezione Notes

"Se un programma viene avviato con questa function, affinché continui a essere eseguito in background, l'output del programma deve essere reindirizzato a un file o a un altro stream di output. In caso contrario, il PHP si bloccherà fino all'esecuzione di il programma finisce. "

Altra soluzione:

  • Lo script mette un token da qualche parte (DB / filesystem) quando deve essere inviata una mail (il token può contenere dati per la generazione della posta)
  • Un demone (può essere scritto in php) viene eseguito in background alla ricerca di token e "li mangia" per submit posta

Uso questo tipo di soluzione parecchio …

Sto usando jQuery e AJAX per fare cose del genere per script PHP che richiedono molto tempo.

Quello che vuoi usare è qualcosa chiamato beanstalkd

Dettagli: come posso get un elenco di tutti i lavori in un pipe di beanstalk?

Ti permetterà di mettere in coda i lavori (fai 1, poi 2, poi 3 e poi 4) puoi anche distribuire queste attività tra i server (sì per i lavori php!).