Arka plan işlemi tamamlandıktan sonra PHP Lansmanı komut?

3 Cevap php

Ben exec ile .. xpdF ile bir PDF2SWF ile PDF ve Endeksleme dönüştürme ediyorum .. Sadece bu gerçekten yüksek olması yürütme zaman gerektirir.

Bu arka plan işlemi olarak çalıştırmak ve sonra dönüştürme yapıldığında bir komut dosyası başlatmak mümkün mü?

3 Cevap

Genel olarak, php konuları uygulamıyor.

Ama sizin için uygun olabilecek bir ZF-sınıf vardır:

http://framework.zend.com/manual/en/zendx.console.process.unix.overview.html

ZendX_Console_Process_Unix allows developers to spawn an object as a new process, and so do multiple tasks in parallel on console environments. Through its specific nature, it is only working on nix based systems like Linux, Solaris, Mac/OSx and such. Additionally, the shmop_, pcntl_* and posix_* modules are required for this component to run. If one of the requirements is not met, it will throw an exception after instantiating the component.

Uygun bir örnek:

class MyProcess extends ZendX_Console_Process_Unix
{
    protected function _run()
    {
        // doing pdf and flash stuff
    }
}

$process1 = new MyProcess();
$process1->start();

while ($process1->isRunning()) {

    sleep(1);

}

echo 'Process completed';

.

Popen () yerine exec () kullanmayı deneyin.

Bu kesmek hatta Windows, gerekli herhangi bir ek kütüphaneler üzerine, herhangi bir standart PHP kurulumu üzerinde çalışacak. Yo gerçekten bu şekilde yumurtlamaya, fakat bazen bu yeterli süreçlerin tüm yönleriyle kontrol edemez:

$p1 = popen("/bin/bash ./some_shell_script.sh argument_1","r");
$p2 = popen("/bin/bash ./some_other_shell_script.sh argument_2","r");
$p2 = popen("/bin/bash ./yet_other_shell_script.sh argument_3","r");

Üç olurken kabuk komut aynı anda çalıştırmak ve sürece bir pclose ($ p1) yapmazsanız (veya $ P2 veya P3 $) veya bu boruların herhangi okumaya çalışacağım, onlar da PHP yürütme engellemez.

Eğer diğer şeyler (eğer PHP ile yapıyoruz bir) ile bittiğinde borularda () pclose çağırabilir, ve size bitirir pclosing olan süreci kadar komut yürütme duraklar. Sonra komut başka bir şey yapabiliriz.

Bu komut bitene kadar da PHP () sonuçlandırmak veya ölmek unutmayın. Yazısının sonuna ulaşan veya die () çağrılırken beklemek yapacaktır.

Eğer komut satırından çalışan iseniz, pcntl_fork kullanarak bir php işlemi çatal

Aynı hile yapacağını cini sınıflar da vardır:

http://pear.php.net/package/System_Daemon

$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
} else if ($pid) {

     //We are the parent, exit
exit();

} else {

// We are the child, do something interesting then call the script at the end.

}