PHP - Boucle FOR en paralllèle

phparallele -  
Gremy87 Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   38
 
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
vinc
 
Tu peux utiliser ajax aussi si tu veux que la page soit cachée
1
phparallele
 
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   Statut Membre Dernière intervention   38
 
qu'une seule chose à dire.

VIVE LINUX ^^
0