Je suis bifurquer avec ce code:PHP bifurquer php-FPM avec pcntl_fork()
echo "1. posix_getpid()=".posix_getpid().", posix_getppid()=".posix_getppid()."\n";
$pid = pcntl_fork();
var_dump($pid);
if ($pid == -1) die("could not fork");
if ($pid) {
//parent
echo "2. pid=".$pid.", posix_getpid()=".posix_getpid().", posix_getppid()=".posix_getppid()."\n";
} else {
//child
$sid = posix_setsid();
if ($sid < 0)
exit;
echo "3. pid=".$pid.", posix_getpid()=".posix_getpid().", posix_getppid()=".posix_getppid()."\n";
$fp = fopen("/tmp/testfile", "w");
fwrite($fp, '$data');
fclose($fp);
}
Pour une raison quelconque parfois le bloc else est envoyé au navigateur, et parfois si ($ pid) bloc est affiché. Ce que j'essaie de réaliser est d'envoyer une réponse, puis de poursuivre le traitement après la fermeture de la connexion avec le client. Puis fermez-vous enfin après que le traitement post-requête est terminé. Si je dors chez l'enfant ou le parent, la demande est suspendue.
Les deux parties sont en cours d'exécution cependant, c'est juste bizarre de déterminer lequel est envoyé au navigateur.
Merci d'avance.
Parce qu'il semble que la connexion au client est maintenue jusqu'à ce que l'utilisateur abandonne. – Chris