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 :

Créer des fonctions


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Avril 2009
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 177
    Points : 78
    Points
    78
    Par défaut Créer des fonctions
    Bonsoir

    Voilà actuellement j'ai réussi à coder un petit truc qui me remonte les port down sur un switch et cela depuis combien de temps (grâce notamment à la fonction snmp).

    Le problème c'est qu'à l'heure actuelle, ce programme marche pour une ip donnée.

    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
    <?php
    	$OID_SW_NAME= '.iso.3.6.1.2.1.1.5.0'; // SNMPv2-MIB::sysName.0
    	$OID_PORT_STATUT = '.iso.3.6.1.2.1.2.2.1.8'; // IF-MIB::ifOperStatus
    	$OID_LAST_CHANGE = '.iso.3.6.1.2.1.2.2.1.9'; // IF-MIB::ifOperStatus
    	$ip_sw = "10.0.0.0";
    	$sec_name = "public" ;
    	$sec_level  = "AuthPriv" ;
    	$auth_protocol = "MD5" ;
    	$auth_passphrase = "Pass" ;
    	$priv_protocol = "DES" ;
    	$priv_passphrase = "Pass" ;
     
    	$sw_name = snmp3_get($ip_sw, $sec_name, $sec_level, $auth_protocol,$auth_passphrase, $priv_protocol, $priv_passphrase,$OID_SW_NAME);
     
    	//echo "Swicth name : " . substr_replace($sw_name,"",0,7);
    	echo "Getting down ports for swicth " . substr($sw_name,8) . " - " . $ip_sw . "<br>\n";
     
    	$ports_statut_sw = snmp3_real_walk ($ip_sw, $sec_name, $sec_level, $auth_protocol,$auth_passphrase, $priv_protocol, $priv_passphrase,$OID_PORT_STATUT);
    	$count = count($ports_statut_sw);
     
    	foreach ($ports_statut_sw as $oid => $value) {
    		//echo 'Clef : ' . $oid . ' - Valeur : ' . $value;
    		$matches = array();
    		preg_match('([0-9])', $value, $matches);
    		// 1 -> up
    		// 2 -> down
    		if ($matches[0] == "2") {
    			$port = substr($oid ,21);
    			$oidport =  $OID_LAST_CHANGE.".".$port;
    			//echo "oid : ". $oidport ."<br>";
    			$ch_ports_statut_sw = snmp3_get ($ip_sw, $sec_name, $sec_level, $auth_protocol,$auth_passphrase, $priv_protocol, $priv_passphrase, $oidport);
    			$matches = array();
    			preg_match('([0-9]+)', $ch_ports_statut_sw, $matches);
    			$time = intval($matches[0]);
    			//$day  = round($time/8640000);
    			echo "port ".$port. " is down since " .$time ."<br>\n";
    		}
    	}
    ?>

    Le but final est de traiter toute une liste d'adresses ip présentes dans un fichier csv.

    Comment procéder afin d'arriver à ce résultat ?
    Faut-il créer des fonction ? J'ai essayé de commencer cela mais sans succès.
    Comment restructurer mon code ?

    Merci.

  2. #2
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    Tu peux commencer par créer une fonction qui exactement ce que tu as déjà.
    Les paramètres de ta fonction, je ne les connais pas, mais apparement, il y aurait au moins l'adresse IP dedans.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
     
    function tonTruc($ip_sw) {
     
    ...
     
    }
     
    ?>
    Ensuite tu peux essayer de l'appeler (juste pour test) avec quelques valeurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php 
    tonTruc('10.0.0.1');
    tonTruc('10.0.0.2');
    ?>
    Si tout marche bien, alors tu peux entamer la lecture de ton fichier CSV (des fonctions bien pratiques existent déjà, comme fgetcsv)

    Ca te donnera certainenement une boucle, dans laquelle tu pourras appeler la fonction que tu viens d'écrire.

    Cela te semble clair ?

  3. #3
    Membre régulier
    Inscrit en
    Avril 2009
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 177
    Points : 78
    Points
    78
    Par défaut
    Bonjour et merci.

    En réalité les valeurs suivantes sont toujours identiques
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    	$OID_SW_NAME= '.iso.3.6.1.2.1.1.5.0'; // SNMPv2-MIB::sysName.0
    	$OID_PORT_STATUT = '.iso.3.6.1.2.1.2.2.1.8'; // IF-MIB::ifOperStatus
    	$OID_LAST_CHANGE = '.iso.3.6.1.2.1.2.2.1.9'; // IF-MIB::ifOperStatus
    	$sec_name = "public" ;
    	$sec_level  = "AuthPriv" ;
    	$auth_protocol = "MD5" ;
    	$auth_passphrase = "Pass" ;
    	$priv_protocol = "DES" ;
    	$priv_passphrase = "Pass" ;
    ?>
    Il n'y a que l'ip qui est différente à chaque fois.
    Donc j'ai essayé de mettre c'est valeur dans un fichier mais le problème c'est que quand je les appels dans la fonction ces valeurs sont inconnues.

    Comment faire ?

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727

  5. #5
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 242
    Points : 354
    Points
    354
    Par défaut
    Citation Envoyé par stealth35 Voir le message
    Effectivement.
    Mais si j'étais toi, je n'utiliserais même pas des variables, mais des constantes, étant donné que les valeurs ne changent pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    define('OID_SW_NAME', 'iso.3.6.1.2.1.1.5.0');
    ?>
    Cela dit regarde quand même comment fonctionne le lien donné par stealth35!

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    y'as pas soucis de porter pour les contantes

  7. #7
    Membre régulier
    Inscrit en
    Avril 2009
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 177
    Points : 78
    Points
    78
    Par défaut
    Merci à vous pour les liens.
    J'ai fais un petit exemple qui fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    	$a = 1;
    	$b = 2;
    	function somme($chiffre) {
    		global $a, $b;
    		$b = $a + $b + $chiffre;
    		echo $b;
    	}
    	somme(4);
    ?>
    Mais si j'ai bien compris vous me déconseiller d'utiliser cette méthode. C'est ça ?

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    ou des contantes, c'est comme tu veux

  9. #9
    Membre régulier
    Inscrit en
    Avril 2009
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 177
    Points : 78
    Points
    78
    Par défaut
    Ok merci.

    Après réflexion je pense utiliser les constantes.
    Comme cela je vais pouvoir utiliser un fichier ini

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $conf = parse_ini_file('constantes.ini');
    foreach ($conf as $key => $val)   define($key, $val);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 35
    Dernier message: 14/11/2008, 15h30
  2. [NOVICE] Créer des fonctions
    Par Invité2 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 28/08/2008, 12h40
  3. Créer des fonctions dynamiques
    Par Superne0 dans le forum C
    Réponses: 88
    Dernier message: 24/03/2007, 10h26
  4. Créer des fonctions de conversion d'unités
    Par frenzy dans le forum Langage
    Réponses: 6
    Dernier message: 01/03/2006, 09h52
  5. Créer des fonctions au sein d'un script
    Par mat.M dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/03/2004, 15h25

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