IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Système] optimisation de script : ping en cascade sous windows


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 86
    Points : 130
    Points
    130
    Par défaut [Système] optimisation de script : ping en cascade sous windows
    Bonjour,

    Je rencontre quelques problemes de lenteurs d'execution de script, dut a l'attente de la réponse du ping fait par windows, je suis a la recherche d'une solution en PHP me permettant de faire 172 pings en rafale sans attendre le retour.

    Voici le code, pour le moment je bidouille avec le time limite d'execution de script de PHP mais bon ce n'est pas tres propre... surtout que je veux faire cette rafale de ping tte les 5 minutes a peu pres.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    <?
    //fixe un délai de 1 minutes 50 pour l'execution du script ;
    set_time_limit(110);
    // Définition du tableau pour etablir le processus de test de connexion
       $descriptorspec = array( 
       0 => array("pipe", "r"), 
       1 => array("pipe", "w"), 
       2 => array("file", "errors.php", "a"), ); 
    // fin de définition du tableau pour établir le processus de test de connexion
     
     
    //connexion a la base de donnée
    	$link = mysql_connect("localhost", "root", "");
    //selection de la base de donnée	
    	mysql_select_db("Osiris", $link) or die(mysql_error());
     
    //execution de la requete sur la table qui sera stocké dans un tableau PHP
    	$query = "SELECT * FROM `annuaire_reseau`";
    	$result = mysql_query($query, $link) or die($query . " - " . mysql_error());
     
     
    //Affichage du nombre d'enregistrements selectionnés	
    	$nbResults = mysql_num_rows($result);
    	echo "nombre d'enregistrements:".$nbResults;
     
    //debut de la boucle de test
    $ping = "localhost";
    while ($tab = mysql_fetch_array($result))
    {
     
    		echo "je ping:".$tab['ip']."<br>";
     
    //Lancement d'un processus de ping
    	$process = proc_open("ping localhost -n 6", $descriptorspec, $pipes); 
    if (is_resource($process)) 
    	{ 
         $a=0;
        while(!feof($pipes[1]))
        { 
        $a++;
        if ($a==14) $ping = fgets($pipes[1], 128)."<BR>";
        else fgets($pipes[1], 128);
          }
        fclose($pipes[1]); 
     
    	}
    //ecriture du resultat ds la table
    $query2 = "UPDATE annuaire_reseau SET PING='".$ping."' WHERE code=".$tab['code'];
    echo $query2;
    mysql_query($query2, $link) or die($query . " - " . mysql_error());
     
    }
    mysql_close($link);
     ?>
    Merci de vos réponses !

  2. #2
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Il faut utiliser la librairie pcntl ou alors faire une requete au lieu d'un ping et utiliser curl_multi_init().
    Nottez que pnctl n'est pas disponnible sous windows mais je n'ai pas compris si vous utilisiez un serveur windows (dommage) ou si vous pingez des machines sous windows.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 86
    Points : 130
    Points
    130
    Par défaut
    Mon serveur est sous windows, et les @ a ping correspondent a des routeurs, qui tourne sous des IOS Cisco.

    j'ai des connaissances assez limité en prog php,
    avec la librairie pcntl en gros je vais devoir lancer 172 processus en meme temps en 4/5 secondes, au lieu de lancer mes 172 a suivres dans l'etat actuel des choses?
    Sinon pour la fonction curl_multi_init(), j'ai un peu de mal a trouver des renseignements sur son utilisation.

  4. #4
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Pcntl permet de gerer des processus simultannés mais c'est impossible sur un serveur windows (OS dont la qualité de la gestion de processus est réputée n'est-ce-pas ...).

    Faute de documentation, je m'en suis sortit dans un script de syncronisation de fichiers (entre autres) grâce à Google Codesearch.
    N'oubliez pas d'utiliser cet outil de recherche à l'avenir, c'est par ce moyen que je trouve les meilleurs scripts !
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2007
    Messages : 86
    Points : 130
    Points
    130
    Par défaut
    Ah sympa ce google code search je ne connaissais pas j'utilisais le google classique.

    sinon personne d'autre n'aurait une solution pour ce script sous windows, sinon je vais me sentir obligé de migrer...

  6. #6
    Inscrit

    Profil pro
    H4X0|2 @ YourLabs Business Service
    Inscrit en
    Octobre 2006
    Messages
    657
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : H4X0|2 @ YourLabs Business Service
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2006
    Messages : 657
    Points : 909
    Points
    909
    Par défaut
    Le manuel de php est formel, est-ce possible d'utiliser cygwin pour compiler php sous un pseudo-unix ? probablement, mais j'ignore si il y a un gestionnaire de paquets, dans le cas contraire cela sera très long et fastidieux : surtout sans connaissances en systême GNU.
    YourLabs Business Service: Conseil en Strategie Numerique / Club de 1337 Haxors depuis 2012 / Marque de Logiciels Libres / Blog / GitHub /
    Citation Envoyé par C.A.R. Hoare, The 1980 ACM Turing Award Lecture
    There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies and the other way is to make it so complicated that there are no obvious deficiencies.”
    More great quotes - RIP Uriel

Discussions similaires

  1. Script arrêt/démarrage base sous windows
    Par debutant_oracle dans le forum Administration
    Réponses: 6
    Dernier message: 29/05/2007, 16h30
  2. [Système] Un exec qui n'exec pas sous windows :)
    Par DanaX dans le forum Langage
    Réponses: 2
    Dernier message: 23/05/2007, 15h32
  3. Little Script UNIX ==> A Passer sous Windows
    Par argoet dans le forum Windows
    Réponses: 5
    Dernier message: 15/11/2004, 16h36
  4. Ping de broadcast sous Windows
    Par ovh dans le forum Développement
    Réponses: 10
    Dernier message: 09/05/2003, 18h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo