PHP pcntl_fork ile php-fpm bölmek ()

2 Cevap php

Bu kod ile bölmek ediyorum:

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);

} 

Nedense bazen başka blok tarayıcıya gönderilen ve bazen ($ pid) blok görüntülenir eğer.

Ne elde etmek çalışıyorum bazı yanıt göndermek ve daha sonra müşteri ile bağlantısı kapatıldıktan sonra işleme devam etmektir. Sonra nihayet post-istek işleme bittikten sonra yakın. Ben çocuk veya ebeveyn uyku eğer istek asılı.

Her iki parça sadece üzerinde tarayıcıya gönderildiği belirlemede garip davranıyor olsa da idam ediliyor.

Şimdiden teşekkürler.

2 Cevap

Aslında arka planda çalışmaya devam sonra, fastcgi_finish_request() tarayıcıya yanıtı göndermek için kullanmalısınız. PHP-FPM'yi kullanırken bu SADECE çalışır, ama unutmayın.

Not: fastcgi_finish_request() function PHP kılavuzda belgelenmiş (bug 61449), ancak kullanım ileriye oldukça düz değildir.

ignore_user_abort() gelince, php.net bazı yorumlar onunla Content-Length: 0 başlığını kullanarak öneririz, ancak Internet Explorer ile birlikte SSL kullanırken bu sorunlara neden olur.