Commande exec

Eléphant du PHP | 158 Messages

13 avr. 2005, 13:55

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 :wink:

A bientot et merci d'avance
°°°Darkbibou°°°

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 14:01

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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 14:03

essaye comme ça :
$ping_machine= exec('ping '.$adresse_ping,$out_ping); 

Eléphant du PHP | 158 Messages

13 avr. 2005, 14:14

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:
°°°Darkbibou°°°

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 14:20

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à ;)

Eléphant du PHP | 158 Messages

13 avr. 2005, 14:28

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.
°°°Darkbibou°°°

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 14:29

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>";
}
?>

Mammouth du PHP | 859 Messages

13 avr. 2005, 14:42

<?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

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 14:44

ah bon bizarre

chez moi le code que j'ai copié/collé fonctionne très bien... :?:

Eléphant du PHP | 158 Messages

13 avr. 2005, 14:51

count ne donne pas la taille du tableau je pense :cry:
°°°Darkbibou°°°

Eléphant du PHP | 158 Messages

13 avr. 2005, 14:56

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.
°°°Darkbibou°°°

Eléphant du PHP | 158 Messages

13 avr. 2005, 15:06

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>
°°°Darkbibou°°°

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 15:14

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

Eléphant du PHP | 158 Messages

13 avr. 2005, 15:16

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
°°°Darkbibou°°°

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

13 avr. 2005, 15:20

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