Discussion:
Probleme au lancement d'un script c li avec shell_exec()
(trop ancien pour répondre)
Jean-Francois Ortolo
2009-02-16 16:26:53 UTC
Permalink
Bonsoir

J'ai un script tmp_cli.php , comportant la première ligne classique
pour un script Shell:

#!/usr/bin/php

Le script ne fait rien d'autre que de lire le contenu de l'array
$argv[][$i] de $i = 1 à ($arc - 1) , puis parser chaque paramètre de la
forme: "var=$var", puis affiche les lignes correspondantes: echo
"\t\$var = " . $var . "\t\n";

Le script tmp_cgi.php qui lance ce script cli, utilise la commande
shell_exec(), qui me semble poser problème, le problème étant de savoir
comment cette commande choisit le Shell qui prend en charge le script
déclenché.

Donc, ce script cgi contient les 3 instructions suivantes, avec les
paramètre qui vont bien, codés de la mêe manière, et reçus par le script
cgi de la manière classique, en get:

$output = shell_exec("./tmp_cli.php sql=" . $sql . " affic=" . $affic);

echo $output . "<br>\n";

exit;


...Ceci pour me limiter à deux paramètres.

Sur mon ordinateur chez moi ( php en mode cli ), ça marche très bien,
et les paramètre s'affichent correctement.

Or... Il se trouve que l'interpréteur php du serveur, était en mode
cgi. Je ne sais pas si cela a eu un effet, mais le fait est, que le
script cli déclenché, s'est autoreproduit de manière infinie, et a donné
lieu à de très nombreux processus de ce nom: "tmp_cli.php", ce qui a mis
le serveur à genoux. Il a du être rebooté.

Comment cela est-il possible, que le fait que l'interpréteur php soit
en mode cgi, ait eu cet effet-là ?

( C'est un serveur dédié ).

Et... Si le problème ne vient pas du fait que l'interpréteur était
compilé en mode cgi ( indiqué par 'php -v' ), d'où vient le problème ?

Merci beaucoup de vos réponses.

Bien à vous.

Amicalement.

Jean-François Ortolo
Jean-Francois Ortolo
2009-02-19 09:23:55 UTC
Permalink
Aux dernières nouvelles...

Il semblerait qu'un nouvel essai avec un interpréteur php en mode
cli, fonctionne parfaitement.

Donc, le paramètre de la fonction shell_exec() devient:


$output = @shell_exec("/usr/bin/php -q -f ./tmp_script.php 2>/dev/null");

echo $output . "<br>\n";

exit;

/usr/bin/php est un interpréteur php en mode cli, ça roule.

Problème résolu.

Bien à vous.

Amicalement.

Jean-François Ortolo

Continuer la lecture sur narkive:
Loading...