Çalıştırın ve php sistem çağrısını unutmak

4 Cevap php

Yani benim php kod bazı komut dosyası çalıştırmak için çalışıyorum. Bu sayfa blah.php yaşıyor

<?php
     // ....
     // just basic web site that allows upload of file...
?>

Ben sistem çağrısı kullanabilirsiniz içeride

if (system("blah.pl arg1") != 0)
{
   print "error\n";
}
else
{
   print "working on it..you will receive e-mail at completion\n";
}

Works great but it waits until it completes until it prints working on it. I am aware that I am calling perl script from php not a typo.

How can I just start program execution and let it complete in background. The blah.pl script handles e-mail notification.

Herkes?

Teşekkürler bunu takdir

4 Cevap

system function belgeleri:

Bir program bu fonksiyon ile başladı ise Note:, arka planda çalışmaya devam etmek için sırayla, programın çıktısı bir dosya veya başka bir çıkış akımına yeniden yönlendirilmesi gerekir. Aksi takdirde PHP programı biter yürütülmesine kadar askıda kalmasına neden olacaktır.

Sadece Perl script çıktısını yönlendirmek ve PHP komut bitirmek için beklemek zorunda kalmadan çalıştırmak mümkün olmalıdır.

system("blah.pl arg1 > /dev/null 2>&1 &");

Eğer arka planda işlem spawn bir işareti ekleyebilir miyim?

if (system("blah.pl arg1 &") != 0)

Muhtemelen popen işlevini kullanabilirsiniz

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

Tüm PHP komut satırı fonksiyonları bir sonuç için beklemek beri - Sana e-posta göndericisi komut aramak için ayrı bir sayfa var öneririz.

Diğer bir deyişle, cURL veya bir sonuç almadan önce bağlantıyı kapatmak için olanak sağlayan dosya sargıları kullanarak email.php sayfada (ya da her neyse) için bir istek gönderin. Yani süreç bu gibi bir şey olacak.

    	page_running.php
    	|
    cURL call to (email.php?arg1=0)
    	|			|
final output    	email.php
    				|
    				calls system("blah.pl arg1")