Dans diverses applications PHP, il est nécessaire d'exécuter des scripts Shell de manière asynchrone, sans entraver les performances de la requête principale. La tâche à accomplir consiste à appeler un script shell qui effectue des appels SOAP, ce qui peut prendre du temps. Cependant, le script PHP ne doit pas attendre la fin du processus shell.
Efforts d'exploration
Initialement, des fonctions comme exec() et shell_exec() ont été prises en compte. Cependant, aucun d'entre eux ne fournit le comportement non bloquant souhaité.
Invocation asynchrone à l'aide de l'arrière-plan
Une solution à cette énigme réside dans l'arrière-plan du script shell à l'aide du '& ' opérateur. En ajoutant '&' à la commande exec, le script shell est exécuté en arrière-plan, permettant à la requête PHP de poursuivre son exécution sans entrave.
exec("sh script.sh &");
Redirection des flux de sortie et d'erreurs
Dans certains scénarios, il peut être souhaitable de supprimer à la fois la sortie standard et les flux d'erreurs du script shell. Ceci peut être réalisé en les redirigeant vers /dev/null en utilisant la syntaxe suivante :
exec("sh script.sh & > /dev/null 2> /dev/null");
Alternatives à la redirection
Alternativement, les flux de sortie et d'erreur peuvent être redirigé en une seule opération à l'aide du '>' opérateur suivi de deux esperluettes (&).
exec("sh script.sh & >& /dev/null");
Cette approche offre une solution concise et lisible pour la redirection de flux.
Notes supplémentaires
Il est important de noter que le comportement de l'opérateur « & » peut différer selon les systèmes d'exploitation et les versions de PHP. Il est recommandé de tester la solution dans l'environnement cible spécifique pour un bon fonctionnement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!