PHP - Boucle FOR en paralllèle
                                    
                        phparallele                    
                                    -
                                     
Gremy87 Messages postés 360 Statut Membre -
        Gremy87 Messages postés 360 Statut Membre -
        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 :
Merci pour vos conseils.
                
            
                
    
    
    
        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:         
- PHP - Boucle FOR en paralllèle
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Easy php - Télécharger - Divers Web & Internet
- Idm for mac - Télécharger - Téléchargement & Transfert
- Instagram for pc - Télécharger - Divers Communication
- Expert php pinterest - Télécharger - Langages
4 réponses
                        
                    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
                
                
    
                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
                        
                    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 :
    
                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"]);  
}
                
                