Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/11/2011, 19h24   #1
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
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 :
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.
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 20h15   #2
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
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 :
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 :
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 ?
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 20h30   #3
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Bonjour et merci.

En réalité les valeurs suivantes sont toujours identiques
Code :
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 ?
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 20h33   #4
Modérateur
 
Inscription : septembre 2010
Messages : 7 173
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 173
Points : 8 548
Points : 8 548
tout est dans la doc :
http://php.net/manual/fr/language.variables.scope.php
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/11/2011, 20h40   #5
Membre confirmé
 
Homme Clément
Développeur informatique
Inscription : décembre 2006
Messages : 213
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : décembre 2006
Messages : 213
Points : 277
Points : 277
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 :
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!
Climoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 20h43   #6
Modérateur
 
Inscription : septembre 2010
Messages : 7 173
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 173
Points : 8 548
Points : 8 548
y'as pas soucis de porter pour les contantes
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h07   #7
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Merci à vous pour les liens.
J'ai fais un petit exemple qui fonctionne.
Code :
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 ?
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h12   #8
Modérateur
 
Inscription : septembre 2010
Messages : 7 173
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 173
Points : 8 548
Points : 8 548
ou des contantes, c'est comme tu veux
__________________
http://blog.stealth35.com/
stealth35 est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2011, 21h19   #9
Membre à l'essai
 
Inscription : avril 2009
Messages : 125
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 125
Points : 24
Points : 24
Ok merci.

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

Code :
1
2
$conf = parse_ini_file('constantes.ini');
foreach ($conf as $key => $val)   define($key, $val);
gege765 est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 14h48.


 
 
 
 
Partenaires

Hébergement Web