Status d'un serveur

Status d'un serveur - PHP - Programmation

Marsh Posté le 09-06-2006 à 19:32:22    

Bonjour a tous! Je possède un serveur de jeu pour usage d'une team Battlefield 2 (entrainements etc.).  
J'aimerais installer sur une page php le status du serveur: online ou offline. Pour cela j'ai créé deux images. J'avais une astuce pour faire ce genre de notification, mais c'est un script assez hasardeux, et je ne le trouve pas propre pour ma page php...  
 

Code :
  1. <img src="http://xxx.xxx.xxx.xxx:80/online.gif" onerror="this.src='http://xxx.free.fr/offline.gif';" />


 
En plus ce script me force a installer apache ou autre sur ma machine serveur, et je n'arrive pas à le configurer correctement...
 
Existe-il un moyen de vérifier si un serveur existe et d'afficher une image en conséquence? je ne connais pas les focntions nécessaires pour cette requete...  :(  
 
merci a vous d'avance!  :jap:

Reply

Marsh Posté le 09-06-2006 à 19:32:22   

Reply

Marsh Posté le 09-06-2006 à 22:36:19    

Une possibilité, mais à tester dans le cas de ton serveur, est d'ouvrir une connection internet sur le port de ton serveur, puis de vérifier que cette connexion n'a pas échouée.
 
Regarde la page de manuel suivante:
http://php.net/fsockopen
renseigne toi sur le port utilisé par ton serveur, et tente d'ouvrir avec cette fonction une connexion.
 
Si tu ne connais pas le port, tu peut essayer le port 7, qui est généralement ouvert lorsque la machine est en réseau, mais qui est fermé sur certaines machines avec protections.
 
Dès que tu a déterminé si la connexion est valide, tu peut la fermer. Celà peut poser problème sur le port de ton serveur, à toi de faire le test s'il le supporte.

Reply

Marsh Posté le 09-06-2006 à 22:38:01    

ok je vais voir pour cette fonction... mais il existe pas tout simplement une fonction équivalent au "ping" de DOS en php? Ou bien c'est la fonction que tu m'as donnée?

Reply

Marsh Posté le 09-06-2006 à 22:45:34    

Le ping, c'est le port 7.
Normalement le ping envoie un message sur le port 7, ce message est retourné tel quel. Mais tu n'a pas forcément besoin d'envoyer un message si tu ne veut pas connaître le taux de transfert / temps de connexion.
 
Sinon, sur le forum, il y a des exemples de pings, mais avec la commande externe ping de DOS/unix. Il n'y a pas de base en PHP de fonction ping.

Reply

Marsh Posté le 09-06-2006 à 22:48:31    

ok donc je vais pas essayer de faire un truc qui existe pas... si vous trouvez quelque chose pour faire un test serveur et retourner une réponse je veux bien essayer. Je vais déjà essayer de trouver avec la comande fsockopen mais je ne comprend pas grand chose à comment utiliser cette fonction...

Reply

Marsh Posté le 09-06-2006 à 22:59:45    

Code :
  1. // retourne un booléen indiquant si une connexion vers l'hôte est possible
  2. function mini_ping($serveur, $port=80)
  3. { // ouvrir une connexion
  4.   $s=fsockopen($serveur, $port);
  5.   if(!$s) return false; // retourne FAUX si connexion échouée
  6.   fclose($s); // sinon refermer la connexion
  7.   return true; // retourner VRAI
  8. }


edit: ha oui exact, ça ne fonctionne pas avec le port 7. Essayer avec le port 80?

Message cité 1 fois
Message édité par nargy le 10-06-2006 à 08:22:34
Reply

Marsh Posté le 09-06-2006 à 23:02:26    

edit: ça devrai aller

Reply

Marsh Posté le 09-06-2006 à 23:04:23    

ok j'ai mieux compris! Mais je met aussi:

Code :
  1. $serveur=xxx.xxx.xxx.xxx
  2. $status="http://xxx.xxx.xxx.xxx/online.jpg"


Mais il manque pas un else pour si on arrive ou pas à se connecter? a quoi correspondent le return false et true? désolé pour ma non compréhension mais je début vraiment en php... c'est gentil de m'aider!

Reply

Marsh Posté le 09-06-2006 à 23:08:54    

La notion de ports n'est valable que pour les protocoles tcp et udp !
Ping utilise ICMP, qui s'appuie sur IP ... mais en aucun cas sur tcp ou udp :s

Reply

Marsh Posté le 09-06-2006 à 23:09:36    

ah, donc le script n'est pas valable?

Reply

Marsh Posté le 09-06-2006 à 23:09:36   

Reply

Marsh Posté le 09-06-2006 à 23:14:49    

Absolument pas si tu veux faire un 'ping' vers une machine.
Maintenant tu peux lancer une connexion via socket en utilisant un port que tu sais etre ouvert sur la machine distante ... si le port est ouvert et que la connexion avec socket fonctionne ca veut dire que la machine est sur le reseau ... dans le cas contraire non.


Message édité par afbilou le 09-06-2006 à 23:18:09
Reply

Marsh Posté le 09-06-2006 à 23:17:04    

arf! Comment faire un script valable alors?tu peux m'aider?

Reply

Marsh Posté le 10-06-2006 à 08:13:53    

Sur le forum:
http://forum.hardware.fr/hardwaref [...] 0365-1.htm
Sinon, j'ai changé le code ci-dessus pour le faire fonctionner sur le port 80 (vérification serveur web actif), et je l'ai commenté.


Message édité par nargy le 10-06-2006 à 08:24:16
Reply

Marsh Posté le 10-06-2006 à 09:24:43    

nargy a écrit :

Code :
  1. // retourne un booléen indiquant si une connexion vers l'hôte est possible
  2. function mini_ping($serveur, $port=80)
  3. { // ouvrir une connexion
  4.   $s=fsockopen($serveur, $port);
  5.   if(!$s) return false; // retourne FAUX si connexion échouée
  6.   fclose($s); // sinon refermer la connexion
  7.   return true; // retourner VRAI
  8. }




 
Je veux bien, mais en fait, quel est le résultat affiché si la connexion est réussi ou ratée? parce que mon but est de mettre une image... doit y avoir une autre partie au script ?

Reply

Marsh Posté le 10-06-2006 à 09:51:29    

Reply

Marsh Posté le 10-06-2006 à 11:57:48    

Après tout, ce code est souvent demandé....
 
Deux fichiers:
ping.php:
prends en argument:

  • host: le serveur à pinger
  • urlon: l'url de l'image à afficher si le serveur est actif
  • urloff: l'url de l'image à afficher si le serveur est éteint
  • timeout: optionel, à 1 seconde par défaut, temps maximal du ping apès lequel le serveur est considéré hors ligne


page.php: exemple d'utilisation de la page ping.php
Définit la fonction suivante:
function ping_image($host, $urlon, $urloff, $urlwait, $alt, $width=0, $height=0, $timeout=0)
avec les paramètres:

  • $host: serveur à tester
  • $urlon: url de l'image si serveur actif
  • $urloff: url de l'image si serveur éteint
  • $urlwait: url de l'image pour patienter lors du ping
  • $alt: texte alternatif au cas où les images sont indisponibles
  • $width: taille des images, optionel mais plus joli
  • $height: taille des images, optionel mais plus joli
  • $timeout: optionel, 1 seconde par défaut


ping.php:

Code :
  1. <?
  2. function mini_ping($host, $timeout=1)
  3. {
  4.   // vérifier paramètre
  5.   $timeout=(int)$timeout;
  6.   if($timeout==0) $timeout=1;
  7.   // detecter si serveur sous unix
  8.   if($_SERVER['SCRIPT_FILENAME'][0]=="/" )
  9.     exec('ping -c1 -w'.escapeshellarg($timeout).' '.escapeshellarg($host) , $out, $ret);
  10.   else // ou windows
  11.     exec('ping -n 1 -w '.escapeshellarg($timeout).' '.escapeshellarg($host) , $out, $ret);
  12.   return $ret==0;
  13. }
  14. // rediriger le navigateur suivant le résultat du ping
  15. if(mini_ping($_GET['host'], $_GET['timeout']))
  16.   header("Location: ".$_GET['urlon']);
  17. else
  18.   header("Location: ".$_GET['urloff']);
  19. ?>


 
page.php:

Code :
  1. <?
  2. function ping_image($host, $urlon, $urloff, $urlwait, $alt, $width=0, $height=0, $timeout=0)
  3. { // vérif des arguments
  4.   $width=(int)$width;
  5.   $height=(int)$height;
  6.   // afficher une image stylisée
  7. ?>
  8. <img style="<? if ($width) echo 'width:'.$width.'px;'; ?><? if ($height) echo 'height:'.$height.'px;'; ?>background:url(<? echo htmlentities($urlwait) ?> )" alt="<? echo htmlentities($alt) ?>" src="ping.php?host=<? echo htmlentities($host) ?>&timeout=<? echo htmlentities($timeout) ?>&urlon=<? echo htmlentities($urlon) ?>&urloff=<? echo htmlentities($urloff) ?>">
  9. <?
  10. }
  11. // exemple d'utilisation:
  12. ping_image("forum.hardware.fr",
  13.            "server-on.png",
  14.            "server-off.png",
  15.            "server-wait.png",
  16.            "...",
  17.            64, 64, 3);
  18. ?>


Oilà... chez moi ça marche, mais pas testé sous windoz. Si ya des volontaires... ou des commentaires.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed