Page 1 sur 2
Commande exec
Posté : 13 avr. 2005, 13:55
par Darkbibou
Je souhaiterai faire un ping en php sur une machine possédant une adresse ip stockée dans la variable $adresse_ping :
J'ai essayé ca:
$ping_machine= exec('ping $adresse_ping',$out_ping);
Mais j'ai du faire une erreur de syntaxe car j'obtient la reponse hôte inconnu :(
Si quelqu'un à une autre :idea: où voit mon erreur ca m'inetresse
A bientot et merci d'avance
Posté : 13 avr. 2005, 14:01
par ouckileou
si tu fais un ping direct dans une console ton adresse répond ?
car ceci fonctionne chez moi :
<?php
$ping_machine= exec('ping www.google.fr',$out_ping);
echo $ping_machine;
?>
tu as regardé la doc sinon ? il y a des exemples avec ping
http://fr2.php.net/function.exec
Posté : 13 avr. 2005, 14:03
par ouckileou
essaye comme ça :
$ping_machine= exec('ping '.$adresse_ping,$out_ping);
Posté : 13 avr. 2005, 14:14
par Darkbibou
j'ai essayé mais le problème c'est que je ne sait pas comment afficher le résulat de cette ligne de commande :roll:
Posté : 13 avr. 2005, 14:20
par ouckileou
echo $ping_machine
comme je l'ai mis, pour afficher plusieurs lignes voir dans les exemples de la doc
mais comment as-tu la réponse "hôte inconnu" si tu n'affiches rien ??
le fait est que chez moi, ceci ne fonctionne pas :
<?php
$cible = "www.google.fr";
$ping_machine= exec('ping $cible',$out_ping);
echo $ping_machine;
?>
par contre comme ça ça fonctionne :
<?php
$cible = "www.google.fr";
$ping_machine= exec('ping '.$cible,$out_ping);
echo $ping_machine;
?>
j'en déduis donc que ton problème vient de là

Posté : 13 avr. 2005, 14:28
par Darkbibou
dsl mais echo $ping_machine ne m'affiche strictement rien et de plus je voudrai afficher chaque ligne soit de $ping_machine ou du tableau de sortie (si je me trompe pas dans la syntaxe du exec) $out_ping.
Posté : 13 avr. 2005, 14:29
par ouckileou
pour afficher le résultat complet du ping :
$adresse_ping = "www.google.fr";
$ping_machine= exec('ping '.$adresse_ping, $out_ping);
for ($i=0;$i<=count($out_ping);$i++) {
echo $out_ping[$i]."<br>";
}
?>
Posté : 13 avr. 2005, 14:42
par flitox
<?php
$cible = "www.google.fr";
$ping_machine= exec("ping $cible",$out_ping);
for ($i=0;$i<=count($out_ping);$i++) {
echo $out_ping[$i]."<br>";
}
?>
ouckileou, c'est juste un problème de quotes. Avec les simples il ne trouve pas mais avec les double c'est ok
Posté : 13 avr. 2005, 14:44
par ouckileou
ah bon bizarre
chez moi le code que j'ai copié/collé fonctionne très bien...

Posté : 13 avr. 2005, 14:51
par Darkbibou
count ne donne pas la taille du tableau je pense

Posté : 13 avr. 2005, 14:56
par Darkbibou
Ah si pardon :S
Par contre j'ai pas encore réglé mon problème, je cherche a adapaté ton petit bout de code au reste de mon script en fait.
Posté : 13 avr. 2005, 15:06
par Darkbibou
Voila mon code, l'affichage avec la boucle for pose problème car elle est à l'intérieur d'un while et je doit la laisser dedans car la valaeur de ping adresse est récupéré dedans, voici mon code:
<HTML>
<HEAD>
<TITLE> Affichage des données de la table gestion_machine </TITLE>
</HEAD>
<BODY>
<BR>
<H2 align="center">Voici la liste des machines répertoriées dans la base de données</H2>
<H3 align="center">Par ordre alphabétique</H3>
<BR>
<DIV align="center"><blockquote>Cliquez sur les l'adresse IP pour accéder à la page d'acceuil de l'imprimante ou pour prendre la main sur la machine !</blockquote>
<blockquote>Sinon cliquez sur le lien ci dessous pour accèder au formulaire de recherche :</blockquote>
<blockquote><A href="Recherche_Machine.html">Formulaire de recherche</A></blockquote></DIV>
<!-- Debut du script en php -->
<?
//connexion à la base de données:
$liendb=mysql_connect("localhost","root","")or die("la connexion à la base a échoué");
// selection de la base à remplir:
mysql_select_db("technique")or die("Impossible de se connecter à la base de données");
;
// requête de contrôle de l'affichage
$sql="SELECT * FROM gestion_machine ORDER BY Nom_machine";
$resultat=mysql_query($sql);
//$lgn=mysql_num_rows($resultat);
//$nbcol=mysql_num_fields($resultat);
/*affichage des données*/
echo"<TABLE border=1 align=center cellspacing=1>"; // creation du tableau d'affichage
while($affchamp = mysql_fetch_row($resultat))// creation d'une variable tableau qui stocke les données résultats de la recherche
{ // tant que $affchamp existe on fait:
echo"<TR>";
echo"<TD>".$affchamp[0]."</TD>"; //affiche la valeur du champ correspondant ici au nom de la machine
echo"<TD>".$affchamp[1]."</TD>"; // idem mais pour l'emplacement
echo"<TD>".$affchamp[2]."</TD>";
if ($affchamp[5]=="Imprimante"){ //Boucle de teste pour savoir quel est le type de l'appareil
$url2 = "http://"."$affchamp[3]"; // si c'est une imprimante on affiche son ip comme lien html
echo"<TD>"."<A href='".htmlentities($url2)."'>$affchamp[3]</A>"."</TD>";
}elseif ($affchamp[5]=="Ordinateur bureau"){
$url2 = "http://"."$affchamp[3]".":5800"; // si c'est un ordinateur on cree le lien html permettant de lancer VNC et de prendre la main
echo"<TD>"."<A href='".htmlentities($url2)."'>$affchamp[3]</A>"."</TD>";
}elseif ($affchamp[5]=="Ordinateur portable"){
$url2 = "http://"."$affchamp[3]".":5800";
echo"<TD>"."<A href='".htmlentities($url2)."'>$affchamp[3]</A>"."</TD>";
}elseif ($affchamp[5]=="Switch/Hub"){
$url2 = "http://"."$affchamp[3]".":5800";
echo"<TD>"."<A href='".htmlentities($url2)."'>$affchamp[3]</A>"."</TD>";
}else{
echo"<TD>".$affchamp[3]."</TD>"; // sinon on affiche juste l'IP
}
echo"<TD>".$affchamp[4]."</TD>";
echo"<TD>".$affchamp[5]."</TD>";
echo"<TD>".$affchamp[6]."</TD>";
// lancemenent d'un ping sur l'IP
echo"</TR>";
$adresse_ping= $affchamp[3];
echo "$adresse_ping --";
$ping_machine= exec("ping $adresse_ping",$out_ping);
//$ping_machine= exec('ping 194.214.236.246',$out_ping);
$taille_out= count($out_ping);
echo"$taille_out";
for ($i=0;$i<=count($out_ping);$i++) {
echo $out_ping[$i]."<br>";
}
} // fin du while/tant que
echo"</TABLE>";
// Fermeture de la base
mysql_close($liendb);
?>
<!-- fin du script en php -->
</BODY>
</HTML>
Posté : 13 avr. 2005, 15:14
par ouckileou
quel est le problème ? tu peux très bien mettre un for() dans un while
(à propos du for() que je t'ai donné, ce serait plutôt < et non <=count() )
donne plus de précisions sur ce qui se passe
Posté : 13 avr. 2005, 15:16
par Darkbibou
le problème avec le for c'est que pour l'a première ip l'affichage du resultat ping est correct mais pour la deuxieme ip le resultat est double (resultat ip 1 puis resultat ip 2 d'affiché), et ainsi de suite
Posté : 13 avr. 2005, 15:20
par ouckileou
c'est que le ping met ses infos bout à bout...
il te suffit de vider le tableau à chaque tour, en le récréant par exemple
$out_ping = new Array() ou Array() je ne sais plus exactement
ou alors avec unset($out_ping) une fois l'affichage effectué
essaye déjà ça