Question

Je suis en train de convertir un fichier PDF avec PDF2SWF et de l'indexation avec XPDF .. avec exec .. que cela nécessite le temps d'exécution d'être très élevé.

Est-il possible de l'utiliser comme processus d'arrière-plan, puis lancer un script quand il est fait la conversion?

Était-ce utile?

La solution

en général, php ne met pas en œuvre threads.

Mais il y a une ZF-classe qui peut convenir pour vous:

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

  

ZendX_Console_Process_Unix permet   les développeurs pour frayer un objet en tant que nouveau   processus, et ainsi effectuer des tâches multiples dans   en parallèle sur les milieux de la console.   Grâce à sa spécificité, il est   travailler uniquement sur les systèmes nix   comme Linux, Solaris, Mac / OSx et tel.   De plus, le shmop _ , pcntl_ * et   posix_ * modules sont requis pour ce   composant à exécuter. Si l'un des   les exigences ne sont pas remplies, il va jeter   une exception après l'instanciation   composant.

exemple approprié:

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

.

Autres conseils

Essayez d'utiliser popen () au lieu de exec ().

Ce hack fonctionne sur toute installation de PHP standard, même sous Windows, pas de bibliothèques supplémentaires nécessaires. Yo ne peut pas vraiment contrôler tous les aspects des processus vous frayer cette façon, mais parfois cela suffit:

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

Les trois scripts shell donné naissance fonctionneront simultanément, et aussi longtemps que vous ne faites pas un pclose ($ p1) (ou p2 ou p3 $ $) ou d'essayer de lire l'un de ces tuyaux, ils ne seront pas bloquer votre exécution PHP.

Lorsque vous avez terminé avec vos autres choses (celui que vous faites avec votre script PHP), vous pouvez appeler pclose () sur les tuyaux, et que vous arrêterez votre exécution du script jusqu'à ce que le processus que vous finitions pclosing. Ensuite, votre script peut faire autre chose.

Notez que votre PHP ne conclura pas ou mourir () jusqu'à ce que ces scripts ont terminé. Atteindre la fin du script ou d'appeler die () va faire attendre.

Si vous exécutez depuis la ligne de commande, vous pouvez bifurquer un processus PHP en utilisant 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.

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top