Si vous le contrôle de la cible que vous voulez l'appeler de manière asynchrone (par exemple, votre propre "longtask.php"), vous pouvez fermer la connexion à partir de cette fin, et les deux scripts s'exécutent en parallèle. Il fonctionne comme ceci:
- quick.php ouvre longtask.php via cURL (pas de magie ici)
- longtask.php ferme la connexion et continue (magique!)
- cURL renvoie à quick.php lorsque la connexion est fermée
- Les deux tâches en parallèle
J'ai essayé, et ça marche très bien. Mais quick.php ne savez rien à propos de la façon dont longtask.php est en train de faire, sauf si vous créez des moyens de communication entre les processus.
Essayez ce code dans longtask.php avant de faire quoi que ce soit d'autre. Il va fermer la connexion, mais continuent à exécuter (et réprimer toute la puissance de sortie):
while(ob_get_level()) ob_end_clean();
header('Connection: close');
ignore_user_abort();
ob_start();
echo('Connection Closed');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush();
flush();
Le code est copié à partir du PHP, du manuel de l'utilisateur contribué notes et quelque peu améliorée.