Comment exécuter un script php depuis un autre?

Comment exécuter un script php depuis un autre?

Je veux exécuter 3 scripts PHP à partir de mon fichier PHP sans attendre la fin des 3 scripts. En d’autres termes, les 3 fichiers php doivent être exécutés en une seule fois (parallèle) au lieu d’un par un (séquenceur).

Les 3 scripts sont dans le même dossier que mon fichier php principal (script).

Si vous ne voulez pas attendre leur fin, exécutez-les avec

exec('php script.php &> /dev/null &'); shell_exec('php script.php &> /dev/null &'); system('php script.php &> /dev/null &'); `php script.php &> /dev/null &` 

N’importe lequel d’entre eux devrait accomplir le travail, en fonction de votre configuration PHP. Bien qu’il s’agisse de fonctions différentes, leur comportement devrait être similaire puisque toutes les sorties sont redirigées vers / dev / null et que le processus est immédiatement détaché.

J’utilise la première solution dans un environnement de production où un client lance un script d’envoi de SMS bash qui peut durer jusqu’à 10 minutes, mais qui n’a jamais échoué.

Plus d’infos dans: http://php.net/exec · http://php.net/shell_exec · http://php.net/system

que diriez-vous d’utiliser exec("php yourscript.php")

envisagez d’utiliser le système de queue pour stocker vos noms de script php et votre opérateur pour récupérer les données de la queue et effectuer l’exécution, par exemple beanstalkd

Vous devez les exécuter en tant que travaux indépendants, et ce n’est pas vraiment facile – ou portable. La solution habituelle consiste à utiliser nohup ou à exécuter les scripts avec stdout et stderr redirigés vers / dev / null (ou NUL sous Windows), mais cela pose souvent des problèmes.

Si possible, rendez les trois scripts disponibles sous forme de scripts sur le serveur Web et accédez-y via des fonctions asynchrones cURL. Cela a également l’avantage de pouvoir tester les scripts via le navigateur et de vous fournir la sortie des scripts.

Vous pouvez également utiliser popen() , ou sous Linux, l’utilitaire at ou batch .

tiré de http://board.phpbuilder.com/showthread.php?10351142-How-can-I-exec%28%29-in-a-non-blocking-fashion :

Pour exécuter une commande, n’avez-vous pas suspendu votre script php pendant son exécution, le programme que vous exécutez ne doit pas être renvoyé à php. Pour ce faire, redirigez les deux fichiers stdout et stderr vers / dev / null, puis mettez-les en arrière-plan.

 > /dev/null 2>&1 & 

Pour exécuter une commande et la faire apparaître comme un autre processus qui ne dépend pas du thread apache pour continuer à fonctionner (ne mourra pas si quelqu’un annule la page), exécutez ceci:

 exec('bash -c "exec nohup setsid your_command > /dev/null 2>&1 &"'); 

Pour Windows http://www.php.net/manual/en/function.exec.php :

 function execInBackground($path, $exe, $args = "") { global $conf; if (file_exists($path . $exe)) { chdir($path); if (substr(php_uname(), 0, 7) == "Windows"){ pclose(popen("start \"bla\" \"" . $exe . "\" " . escapeshellarg($args), "r")); } else { exec("./" . $exe . " " . escapeshellarg($args) . " > /dev/null &"); } } 

Pour shell_exec, ajoutez le paramètre ‘/ B’, cela vous permet d’exécuter plusieurs exécutables à la fois. Voir ma réponse à cette question: PHP sur une machine Windows; Démarrer le processus en arrière-plan

C’est le même.

shell_exec (‘start / B “C: \ Path \ to \ program.exe”); Le paramètre / B est la clé ici. J’ai essayé de retrouver le sujet pour vous, mais je n’arrive plus à le trouver. Cela fonctionne pour moi.

J’espère que cela résout le problème pour vous.