Page 1 sur 2
effectuer des actions en parallèle
Posté : 11 déc. 2010, 12:50
par altergo
Bonjour,
J'aimerai savoir s'il est possible en PHP, comme dans des langage comme java ou c# de lancer des threads en background.
En gros, l'utilisateur upload un fichier, une page de remerciement apparait pour lui mais derriere le php continue de faire des actions prenant entre 2 et 4 minutes.
Avec mes tests, le page ne s'affiche qu'à la fin des traitements. J'aimerai donc que les traitement en php se fasse en background..
Merci de votre aide
Re: effectuer des actions en parallèle
Posté : 11 déc. 2010, 13:36
par epommate2
Des threads, je pense que non. Par contre, rien ne t'empêche de lancer un processus avec exec par exemple. Bien que ca ne soit pas l'usage ...
http://www.php.net/manual/fr/function.exec.php
Re: effectuer des actions en parallèle
Posté : 11 déc. 2010, 19:17
par altergo
Ah oui tu veux dire par là lancer l'execution d'un autre fichier php par la commande exec(), et dans ce cas la fonction exec() me rendrait la main sans attendre.. bien vu

Re: effectuer des actions en parallèle
Posté : 11 déc. 2010, 23:56
par devlop78
Bonjour,
J'aimerai savoir s'il est possible en PHP, comme dans des langage comme java ou c# de lancer des threads en background.
En gros, l'utilisateur upload un fichier, une page de remerciement apparait pour lui mais derriere le php continue de faire des actions prenant entre 2 et 4 minutes.
Avec mes tests, le page ne s'affiche qu'à la fin des traitements. J'aimerai donc que les traitement en php se fasse en background..
Merci de votre aide
Là tu ne parles pas vraiment de php. Tu peux toujours lancer l'upload dans un iframe caché, chargé une page de remerciement en Ajax. Bref, Php, à ma connaissance, ne possède pas de Threads, et n'étant pas évenementiel, il n'est pas non plus possible de le simuler à l'aide de timer (comme en javascript), mais le navigateur peut, lui, lancer plusieurs pages en même temps.
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 00:09
par altergo
Bonjour,
J'ai essayé ce code :
dans mon code afin que ce fichier soit appelé sans que l'utilisateur n'attende sa fin.
Mais cela ne fonctionne pas, il n'atteint jamais ce fichier, idem lorsque je met le chemin complet.
Si je regarde ce que renvoie exec() (ou system()), c'est le contenu html de la page sur lequel il est exécuté.
Je n'y comprend rien !
Par contre, si j'ouvre un shell et que j'entre "php5 monfichier.php", alors ce fichier est bien executé.
Que faire ?!
Merci de votre aide !
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 00:16
par stealth35
le traitement est si long que ca ?
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 00:22
par altergo
Oui, plusieurs minutes, je ne veux pas que le visiteur s'en aille !
Pourquoi la fonction exec() ne fonctionne pas comme prévu ?
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 01:35
par stealth35
Oui, plusieurs minutes, je ne veux pas que le visiteur s'en aille !
Pourquoi la fonction exec() ne fonctionne pas comme prévu ?
exec c'est limiter php c'est pas du tout fait pour ca, dans se cas la fait un système de queue. "plusieurs minutes" en PHP c'est une éternité y'a un probleme dans ta conception, l'outils n'est pas adapté
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 07:15
par epommate2
Il me semble qu'il faut rediriger la sortie
exec("php5 -f ./auto/traitement.php > /dev/null 2>&1");
(Mais bon, c'est clair que c'est pas super top... c'est quoi ce traitement ?)
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 09:15
par altergo
Merci pour vos réponses.
Malheureusement la redirection de sortie (> /dev/null 2>&1) ne fonctionne pas mieux, le fichier n'est jamais appelé non plus.
Comment faire ?
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 09:51
par epommate2
Tu as testé avec une autre commande ?
Tu as testé avec les droits du serveur web ?
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 10:57
par stealth35
essaye toujours avec un
popen mais bon...
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 16:03
par sebounet
il faut te deconnecter du processus avec nohup
exec("nohup *command* 1>/dev/null/ 2>&1 &");
http://www.php.net/manual/fr/function.exec.php#11800
Je pense que ça devrait résoudre ton problème.
Re: effectuer des actions en parallèle
Posté : 16 déc. 2010, 22:05
par altergo
Bonsoir,
Merci mais malheureusement aucune de ces fonctions (nohup et popen) ne fonctionne pour mon cas.
A titre d'exemple, quand je lance en ligne de commande pur :
le fichier traitement.php est bien atteint, et j'ai meme un nouveau fichier nohup.out qui contient la sortie de la commande.
Quand je lance en php
exec("nohup php5 traitement.php");
Rien ne se passe, pas d'accès à traitement.php, et pas non plus de fichier nohup.out !
Serais-ce à cause de restrictions sur mon serveur (mutualisé) ?
Re: effectuer des actions en parallèle
Posté : 17 déc. 2010, 07:53
par epommate2
Est-ce que tu as essayé exec sur une commande (genre "date") afin de récupérer la sortie pour valider que tu pouvais utiliser exec ?