Arriere plan

Eléphant du PHP | 59 Messages

25 juil. 2005, 17:19

Bonjour a tous,

Je reviens un peu à la charge avec mon priblème que j'avais en partie résolu ici mais il m'en reste encore un.

J'explique:
J'execute un script shell à apartir de php à l'aide de la commande exec()
Mais mon script shell contient une boucle (executant une requete SQL) et est long à executer.
Or exec() attend la fin de l'execution pour redonner la main à php.

J'aimerais donc faire tourner ce programme en arriere plan puisque le résultat est stoqué dans ma table sql et peut etre consultable apres la deconnexion de l'utilisateur.

Ni nohup, ni le & ne semble fonctionner.

J'espere que vous pourrez m'aider. :wink:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 juil. 2005, 17:44

tu as regardé dans la doc ce qu'ils disaient ?
Note : 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.
tu as essayé ?

Eléphant du PHP | 59 Messages

25 juil. 2005, 17:57

oui, j'ai essayé mais mêm résultat!!

exec("./code.sh & > sortie.txt");

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

25 juil. 2005, 19:22

hum bizarre ta redirection

regarde dans la doc on dirait plutôt que c'est un deuxième argument

string exec ( string command [, array &output [, int &return_var]] )

Eléphant du PHP | 59 Messages

26 juil. 2005, 09:34

Je pensais que la redirection se faisait comme en ligne de commande. J'ai essayé ça mais même resulat:
exec("./code.sh & > sortie.txt", $resultat, $erreur);

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2005, 09:38

oui mais tu laisses ta redirection classique en place, et est-ce que $resultat représente un fichier ?

je n'ai jamais utilisé donc je ne peux pas te conseiller plus précisément je ne fais que lire la doc ;)

Eléphant du PHP | 59 Messages

26 juil. 2005, 09:49

J'ai essayé avec ou sans la redirection classique : idem.

Mon $resultat est difini comme ;
$resultat='redirection.txt';

et le fichier existe déja.

J'ai lu la doc aussi mais il ne propose pas vraiment de solution a ce problème :cry:

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2005, 09:54

regarde dans les commentaires de gens, il y a souvent des astuces

certains utilisent effectivement la redirection classique, comme cet exemple
<?PHP
function myspawn()
{
 $command="/usr/local/bin/mybinary infile.txt > outfile.tx2";
 exec($command);
 ## nothing worked for me until I added this next line.
 exec("exit(0)");
}
?> 
moi je ne peux pas trop t'aider plus que ça :roll:

Eléphant du PHP | 59 Messages

26 juil. 2005, 09:56

J'ai trouvé!!!!
Et bah, c'était vraiment tres bete ; je ne plaçais pas au bon endroit mon &, je fait donc, pour ce que ça interesse:

Code : Tout sélectionner

exec("./code.sh > sortie.txt &");
et non:

Code : Tout sélectionner

exec("./code.sh & > sortie.txt");

Mais merci beaucoup à toi ouckileou, ça m'a poussez a reflechir autrement pour t'expliquer et voila!! :lol: :lol:

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

26 juil. 2005, 09:57

J'ai trouvé!!!!
Résolu alors ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

26 juil. 2005, 09:57

cool :)

[Résolu] ?