PHP - Boucle FOR en paralllèle

Fermé
phparallele - 19 mai 2011 à 09:44
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 - 9 juin 2011 à 09:24
Bonjour,


J'utilise une boucle for qui va faire appel à une fonction en php. Cette fonction me permet de rafraichir des infos entre un serveur et une BDD. En gros la fonction va établie une connexion avec une BDD et ensuite une connexion en SSH sur un serveur web. Ensuite, une comparaison de tableau entre la BDD et le retour SSH. Enfin une MAJ est effectuée sur la BDD pour que les infos soient identiques.

Cette fonction met 20 secondes à s’exécuter. Mais si je veux l'utiliser pour mettre à jour plusieurs serveurs, l’opération peut devenir très longue.

Ma question est de savoir s'il existe un moyen pour lancer dans l’exécution d'une boucle for en parallèle ou alors d’exécuter la fonction en arrière plan et quand toutes les opérations sont finies, d'avoir un rafraichissement de la page de l'utilisateur.

Voici un exemple du script et de la fonction :
Code PHP :
for ($i=0;$i<5;$i++) //Normalement le 5 est passé en post par l'utilisateur. 
{
 host_refresh($i)
}

function host_refresh($id_host)
{
    $host_ip = bdd_ctrl_host_afficher_ip($id_host);
    //On met à jour les info sur l'host et sur les VM qu'ils possèdes
    $host_info_refresh = ssh_ctrl_host_info_refresh($host_ip);
    bdd_ctrl_host_update($id_host, $host_info_refresh);
    $host_vm_refresh = ssh_ctrl_host_vm_refresh($host_ip);
    bdd_ctrl_vm_host_vm_update($id_host, $host_vm_refresh);
    header('Location: '.$_SERVER["HTTP_REFERER"]);  
}



Merci pour vos conseils.
A voir également:

4 réponses

Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
19 mai 2011 à 11:18
Bonjour,

voila qui pourrait te mettre sur la voix.

http://www.copix.org/index.php/wiki/Thread

j'ai deja été confronté a un problème de ce type mais je n'ai jamais testé cette solution
1
Tu peux utiliser ajax aussi si tu veux que la page soit cachée
1
Bonjour,

Merci pour vos messages.

J'ai également trouvé un moyen de le faire mais sans faire appel à pcntl.

Voici le code que j'ai mis en place pour les personnes que ça intéresse :
if ($_GET == null)
{
	//On récupère les infos de tous les hosts
	$infohost = bdd_ctrl_host_afficher_all();

	//On boucle pour lancer la commande en parallèle et en même temps
	for ($j=0;$j<count($infohost);$j++)
	{
	exec('/usr/bin/php-cgi /var/www/html/controleur/for_en_parallele.php arg='.$infohost[$j]['id_host'] . ' > /dev/null &');
	}
	header('Location: '.$_SERVER["HTTP_REFERER"]);  
}
else
{
	//On on met la fonction que l'on veut 
	$id_host = $_GET['arg'];

    $host_ip = bdd_ctrl_host_afficher_ip($id_host);
    //On met à jour les info sur l'host et sur les VM qu'ils possèdes
    $host_info_refresh = ssh_ctrl_host_info_refresh($host_ip);
    bdd_ctrl_host_update($id_host, $host_info_refresh);
    $host_vm_refresh = ssh_ctrl_host_vm_refresh($host_ip);
    bdd_ctrl_vm_host_vm_update($id_host, $host_vm_refresh);
    header('Location: '.$_SERVER["HTTP_REFERER"]);  
}
0
Gremy87 Messages postés 352 Date d'inscription mercredi 19 mai 2010 Statut Membre Dernière intervention 19 mars 2014 38
9 juin 2011 à 09:24
qu'une seule chose à dire.

VIVE LINUX ^^
0

Discussions similaires