Commande exec()

Petit nouveau ! | 6 Messages

21 févr. 2012, 13:43

Bonjour,

Je suis complètement bloqué sur une function qui ne parrait pourtant pas bien compliqué. Merci de m'aider :

Je souhaite utiliser la commande exec() de php sur mon hébergement mutualisé dans le but d'executer un fichier php ayant pour fonction d'effectuer un traitement très long (pas de d'attente de l'internaute).

L'utilisation de cette commande fait apparemment appelle à une syntaxe qui peut être lié aux paramètres de l'hébérgement.

Que dois-je mettre dans mon fichier php lancant la commande exec :
exec('???? chemin-de-mon fichier.php ???');

Que dois-je mettre dans mon fichier php pour qu'il s'exectute bien dans un environnement php5 :
????
<?php

blabla

?>

Mon hébergement : OVH

Merci pour votre aide

Eléphant du PHP | 179 Messages

21 févr. 2012, 13:47

hello,
exec() ne fais qu'exécuter une ligne de commande comme si tu la plaçait dans l'invité de commande

donc un truc du genre devrait le faire :

"php /monchemin/monscript.php"

ViPHP
xTG
ViPHP | 7331 Messages

21 févr. 2012, 14:10

Note importante de la doc en relation avec ce que tu veux faire :
Si vous démarrez un programme en utilisant cette fonction et que vous voulez le laisser tourner en arrière plan, vous devez vous assurer que la sortie du programme est redirigée vers un fichier, ou un autre flux de sortie, sinon PHP attendra jusqu'à la fin de l'exécution du programme.

Petit nouveau ! | 6 Messages

21 févr. 2012, 14:22

Et non, ça ne fonctionne pas.

$exec = exec('php /exec/commandes.php');

echo $exec;

et dans commandes.php

echo 'essaie';

Le navigateur tourne et fini par planter.

Une idée ?

Eléphant du PHP | 209 Messages

21 févr. 2012, 14:42

Que te renvoie l'appel à la fonction exec() ?

Petit nouveau ! | 6 Messages

21 févr. 2012, 14:45

Rien, elle mouline et plante le navigateur.

Eléphant du PHP | 209 Messages

21 févr. 2012, 14:47

Tu peux nous mettre le contenu de tes 2 fichiers stp.

Petit nouveau ! | 6 Messages

21 févr. 2012, 14:52

J'ai trouvé, autant pour moi.

Par contre si vous aviez la fin de l’instruction pour que la commande s'execute en tache de fond (redirection de la sortie)
$exec = exec('php.ORIG.5 commande.php var1 var2 ... ????');

Petit nouveau ! | 6 Messages

21 févr. 2012, 15:03

Juste pour explication (parce que j'en ai chié ....) :
exec('php.ORIG.5 commande.php var1 var2 ... ????');
"exec" execute une ligne de commande (comme dans le terminal)
"'php.ORIG.5" c'est une spécification ovh qui indique que d'une on souhaite executer une commande php, et deux en php5
"commande.php" est le fichier à executer. Ce qui est déroutant (ça l'a été pour moi), c'est que l'on doit indiqué le chemin absolut du fichier à executer dans la commande exec, mais le fichier en lui même est executé en local.
"var1 var2" sont les variables à passer à commande.php elles sont récupérées par $argv[1], $argv[2], ...
Il reste la fin, je sais que c'est un truc du genre dev>null, ... qui sert à diriger la sortie ailleurs et donc évite l'attente d'une réponse mais là, si quelqu'un sait compléter...

Eléphant du PHP | 209 Messages

21 févr. 2012, 15:10

Tu peux rediriger vers un fichier :
exec("php /path/file.php arg1 arg2 > log.txt");
Ici ça redirigera vers log.txt.

Je ne savais pas que ça exécutait en tâche de fond ceci dit.. Merci à toi et xTG pour le coup :)

D'une manière générale, il faut toujours travailler avec des urls absolues. Ce sera plus performants et plus sûr ;)

Petit nouveau ! | 6 Messages

21 févr. 2012, 15:18

Et bien justement, c'est le dernier argument que je cherchais. La commande en entier si l'on a pas besoin de stocker le résultat et qu'on souhaite libérer la navigation :
exec("php /path/file.php arg1 arg2 > /dev/null &");
Merci à tous ;)