Je suis en train d'essayer d'exécuter un script Perl depuis un script PHP. J'ai eu ce travail en utilisant diverses méthodes telles que exec, popen et proc_open mais j'ai quelques problèmes pour contourner ce que le bon vieux Google ne me donne pas les réponses.Exécuter le fichier perl à partir du script PHP, mais pas attendre la sortie sur Windows Server
Je dois exécuter le script .pl (en transmettant une variable au script qui est un nombre) à partir du fichier php, mais arrêter le script php d'attendre que le .pl soit terminé (le .pl est susceptible de prendre 4-5 heures pour fonctionner sur le serveur). Je ne m'attends pas à une sortie de retour du script perl (le script perl enregistre sa sortie dans un mysql db) donc j'ai juste besoin qu'il fonctionne sur le serveur et que le script php continue.
Il y a quelques barrières à franchir car elle fonctionne sur des machines Windows exécutant apache, php, mysql.
Je pense que j'ai vu la solution pour Linux, mais il doit rester sur la machine Windows.
courant Im essayant une approche proc_open en utilisant le code suivant (35 sur la ligne proc_open est un identifiant de test, je dois passer au script perl):
$descriptorspec = array(
0 => array("pipe","r"),
1 => array("pipe","w"),
2 => array("file","./error.log","a")
) ;
proc_close(proc_open('perl perlscript.pl 35', $descriptorspec, $pipes));
$i = 0;
while ($i < 1000) {
echo ++$i;
}
Maintenant, ce code n'exécute le script perl mais la boucle while placée après elle (juste pour tester) ne s'exécute jamais (je n'ai pas attendu que le script perl finisse pour voir si c'est le cas) car elle doit attendre que le .pl soit fini.
Cela semble fournir la réponse pour Linux, mais quelqu'un peut-il faire la lumière sur Windows? http: // stackoverflow.com/questions/3420949/php-using-proc-open-comme-ça-ne-pas-attendre-pour-le-script-ça-ouvre-court-vers-fin – azzy81