Réalisation d'un ping sur un serveur.

Petit nouveau ! | 9 Messages

11 nov. 2008, 12:38

Bonjour, j'ai de très brièves connaissances en PHP comme vous allez pouvoir vous en rendre compte mais bon je me lance.

Voilà j'ai un site qui est en cours de construction, je dispose d'une seule page principale ( qui signale que le site n'est pas encore près enfin bref ).
Mon code PHP doit me servir à pinger mon serveur radio, afin de renseigner les cybervoyageurs que la radio est "offline" ou "non chargé" ou "un peu chargé" ou "très chargé".
J'ai commencé à me renseigné sur divers sites et j'ai réussi à pondre ( tout du moins recopier cela ) :
<?php

	header("Content-type: image/gif");
	$time_start = microtime();
	$fp = fsockopen( "http://XXX.XXX.XXX.XXX/", 8000, &$errno, &$errstr, 5);
	
	if( $fp )
		{
			$time_end = microtime();
			$ping = round(($time_end - $time_start) * 1000);
			if($ping <= 50) 
		{
			$statut = "ping/vert.gif";
		}
			if($ping > 50 && $ping <= 200) 
		{
			$statut = "ping/orange.gif";
		}
			if($ping > 200) 
		{
			$statut = "ping/rouge.gif";
		}
		}
	else
		{
			$statut = "ping/offline.gif";
			$ping = 'N/A';
		}


	readfile($statut);

?>

Je voudrais dans un premier temps savoir s'il est viable en terme de ping. Enfin bon, sa n'as pas l'aire de fonctionner.

Ensuite se script doit être lancer depuis ma page principale avec ce code là :

Code : Tout sélectionner

<img src="scripts/php/radio_statut.php" alt="statut" />
D'ailleurs je voudrais aussi savoir quel serait selon vous le ou les moyen(s) de ne pas avoir le lien en claire de mon ficher ("radio_statut.php") dans la source de la page principale. A moins, que le fichier PHP renvois directement un code HTML et donc lors de son exécution n'affiche plus le lien... ( je sais pas si je suis très claire là )

Bref j'espère trouvé toute mes solutions et merci de vos futures réponses.

Mammouth du PHP | 959 Messages

11 nov. 2008, 13:18

Si tu veux obtenir vraiment le ping, (avec le chiffre bien sûr), je pense que la seule solution est d'utiliser la commande system() pour envoyer une commande shell...

Si tu peux te contenter de dire si il est online ou offline (se qui suffit largement je pense, surtout pour un serveur streaming), regarde ça

dans ton cas ça sera :
is_online('xxx.xxx.xxx.xxx', 8000);
:)

Petit nouveau ! | 9 Messages

11 nov. 2008, 14:36

Merci, dans le $host je peux donner une URL de type http://xxx.xxx.xxx.xxx/stream.m3u ??? car le serveur est toujours connecté mais pas forcément la radio .
Mais le port 8000 est ouvert donc il risque de répondre non ? Même si je service n'est pas lancé ???
Voilà merci.

Mammouth du PHP | 959 Messages

11 nov. 2008, 14:43

Donc voilà comment tu l'utilises
function is_online($host, $port){
	$online = FALSE;
 
	$fp = @fsockopen($host, $port, $errno, $errstr, 1); // Se connecte à l'Host
	if($fp) {
		$online = TRUE; // Si la connexion n'a pas échouée
	}
 
	if ($online){ // Si c'est TRUE
	  return '<span style="color:#00FF00">Online</span>';
	} else { // Et si c'est FALSE
	  return '<span style="color:#FF0000">Offline</span>';
	}
}
echo is_online('xxx.xxx.xxx.xxx', 8000);
Non, tu ne peux pas mettre stream.m3u
Car c'est seulement le serveur :P
Sinon, se que tu peux faire, déjà, c'est de tester la différence entre les 2, si stream.m3u existe, il fait quoi ? il te le fait télécharger je suppose ? et si il n'existe pas (que donc la radio n'est pas connectée), il renvoi quoi ? une erreur 404 Not Found ?

Petit nouveau ! | 9 Messages

11 nov. 2008, 14:49

je vais tester après manger héhéhé et je te tiens au jus?

Mammouth du PHP | 959 Messages

11 nov. 2008, 14:51

Ok, ouais :)

Petit nouveau ! | 9 Messages

11 nov. 2008, 15:20

Yesss sa fonctionne merci, mais je risque d'avoir d'autres questions à propos de cela.
Donc maintenant je voudrais que se script soit utiliser dans une page html c'est a dire que je puisse l'utiliser sur différentes pages ...

Mammouth du PHP | 959 Messages

11 nov. 2008, 15:32

Tu créer par exemple un fichier .php avec seulement ce code dedans, puis, avec les autre page tu inclut se fichier de cette façon:
include('ton_fichier.php');
C'est ça que tu veux ou j'ai mal compris ? :P

Petit nouveau ! | 9 Messages

11 nov. 2008, 15:39

J'ai voulu être trop joyeux... Lorsque ma radio est en ligne l'info ne change pas sur la page..

Mammouth du PHP | 959 Messages

11 nov. 2008, 15:47

Avec le code de tout à l'heure (online et offline) il indique seulement si le serveur est en route ou pas.

Sinon, tu utilises quoi ? IceCast ? ShoutCast ?
Sur l'index du serveur, tu dois bien avoir quelque chose qui change quand tu éteint Winamp non ?

Petit nouveau ! | 9 Messages

11 nov. 2008, 15:50

J'utilise Icecast et je vois pas trop ce que tu veux dire avec l'index ???

Mammouth du PHP | 959 Messages

11 nov. 2008, 15:59

Cool, j'utilisais IceCast moi aussi :)
D'après se que je me rappelle, quand tu vas sur l'adresse IP du serveur, c-à-d :
http://xxx.xxx.xxx.xxx:8000/
Tu as une page avec plusieurs blocs gris (si ça n'a pas changé depuis) et chaque blocs représentes une radio, dedans, tu as le titre en cours etc
Et si tu coupes Winamp, tu as un bloc gris en moins...
Dans tout les cas, avec PHP il faudra télécharger la page, se que je te propose c'est de l'analyser, pour savoir si il y a ce bloc ou pas, car forcément, il y a quelque chose qui change dans l'HTML...

Mais sinon, avec le serveur allumé et Winamp également, quand avec ton navigateur tu vas sur http://xxx.xxx.xxx.xxx/stream.m3u, le navigateur te propose de télécharger le fichier m3u ? et si tu coupes Winamp, et que tu revas à la même adresse, que se passe t-il ? erreur 404 ?

Petit nouveau ! | 9 Messages

11 nov. 2008, 16:04

Alors oui lorsque tu lance le http://xxx.xxx.xxx.xxx:8000:stream.m3u, il te le télécharge, ensuite lorsque tu coupe winamp la page de status de la radio reste mais elle retire tout les infos ... tu veux les code html lorsqu'il y a le son et lorsqu'ils n'y en a pas ?

Mammouth du PHP | 959 Messages

11 nov. 2008, 16:07

Donc quand le serveur et la radio sont dispos, quand tu vas sur http://xxx.xxx.xxx.xxx:8000/stream.m3u, il te fait télécharger un fichier supérieur à 0Ko ?
Et quand Winamp est coupé, qu'il n'y a plus de radio mais juste le serveur, et que tu vas sur http://xxx.xxx.xxx.xxx:8000/stream.m3u il te fais quand même télécharger le fichier mais il est totalement vide, il fait 0Ko...

C'est bien ça ?

Petit nouveau ! | 9 Messages

11 nov. 2008, 16:10

Si il pèse tout de même quelque chose...

Tiens j'ai trouvé se code si, pour lire sur le fichier status2.xls
<?php

function connect_icecast($host, $port)
{
    $fp = @fsockopen($host, $port, $errno, $errstr, 3);
    
    if(!$fp)
        return false;

    fputs($fp, 'GET /status2.xsl' . " HTTP/1.0\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)\r\n\r\n");
    
    $page = '';
    while(!feof($fp))
        $page .= fread($fp, 1000);
    
    fclose($fp);
    return $page;
}

function tab_icecast($host, $port)
{
    $contenu = connect_icecast($host, $port);

    if ($contenu)
    {
        $tabChamps = array(2 => 'name', 3 => 'listeners', 4 => 'description', 5 => 'artist', 6 => 'title', 7 => 'url');

        if (preg_match_all('`(/[^,]*),,([^,]*),([^,]*),([^,]*),([^-]*) - ([^,]*),([^,<\/]*)`', $contenu, $resultat))
        {
         foreach($resultat[1] as $numPoint => $mountName)
                  foreach ($tabChamps as $index => $champ)
                     $tabIce[$mountName][$champ] = $resultat[$index][$numPoint];

             return $tabIce;
        }
    else
        return false;
    }
    else
        return false;
}


$tabIceCast = tab_icecast('www.metalizer.fr', 8000);

if($tabIceCast)
{
     echo '<pre>';
          print_r($tabIceCast);
     echo '</pre>';
}
else
    echo 'Parsing impossible';

?>
Je sais pas si sa vas te dire quelque chose ... J'ai pas tout saisi à l'heure code .
Enfin sa peut-être une amélioration mais sa ne résous pas mon problème de 'Offline' ....

J'ai essayé avec une adresse style www.google.fr et la sa fonctionne mais bon toujours pas avec mon serveur.
Modifié en dernier par broska le 11 nov. 2008, 19:25, modifié 4 fois.