Tarayıcınız kopukluk ötesinde çalışır PHP döngü?

6 Cevap

Ben bir şey her on dakikada bir yapılacak döngüler basit bir PHP komut dosyası var istiyorum. Bu dışına barındırılan olurdu ve benim tarayıcı aracılığıyla aktive olur. Benim web alanı dışında sunucuya erişim yok, bu yüzden gibi 'cron' bir seçenek değildir.

(Ben belirli bir süre ya da iş döngüsü sayısından sonra bu durdurmak için çok mutluyum. Ben sadece ben uzakta sayfa senaryodan tarayıcı işaret sonra çalışmaya devam etmek gerekir.)

Böyle bir şey mümkün mü? Teşekkürler.

6 Cevap

PHP betikleri belli bir süre sonra zaman aşımına - Uzun süren programlar için tasarlanmış değil. Bunu her on dakikada bir eşya için bir yol bulmak zorundasınız.

set_time_limit bakabilirsiniz.

Bu yukarıdaki sayfa olduğunu:

Sen set_time_limit yapabilirsiniz (0); komut sonsuza çalışacak kadar - ancak bu tavsiye edilmez ve bir web sunucusu empoze HTTP zaman aşımı (genellikle yaklaşık 5 dakika) ile size yakalamak olabilir.

Belki size erişim ve daha sonra periyodik olarak bu komut isteği diğeri yapmak bir bilgisayara başka bir komut dosyası yazabilirsiniz.

Yop pnctl_fork bakabilirsiniz.

İşte sorun için kesmek:

// Anything before disconnecting, but nothing to be output to the client!
ob_end_clean();
header('Connection: close');
ob_start();
// Here you can output anything before disconnecting
echo "Bla bla bla";
$outsize = ob_get_length();
header('Content-Length: '.$outsize);
ob_end_flush();
flush();
// Do your background processing here
// and feel free to quit anytime you want.

Bunu yapmanın bir yolu, örneğin, web sayfasından yeni bir php sürecini başlatmak için olabilir

<?php

exec("php script_that_runs_for_a_while.php > /dev/null");

?>

Script yerine bitirmek yürütülmesi için beklenmeden, tamamlayacak ki (bir linux sisteminde) / dev / null araçları ekleme.

Öyleyse başlattı, onu seviyor, ne yapabilirim ki komut temelde sunucu üzerinde çalışan sadece yeni bir süreç olduğundan.

Uzun koşu yazısının başında, bazı büyük değere maksimum yürütme zamanı ayarlamak için set_time_limit işlevini kullanmak istediğiniz unutmayın.