Page 1 sur 2

Pourquoi mon code ne fonctionne pas ?

Posté : 01 déc. 2011, 19:45
par rolexiss
Bonjour tous le monde,
J'ai essayé de créer ce petit code php pour voir si mon serveur Minecraft est en ligne ou pas ?
Il est basé sur la fonction ping :
<?php
$j = 25565;
if( @fsockopen( $server[$i]['2.1.8.184'], $port[$j], &$errno, &$errstr, 5) )
{
echo '<strong style="color : green;">EN LIGNE</strong>';
}
else
{
echo '<strong style="color : red;">HORS LIGNE</strong>';
}
?>
Quand je met le code dans une petite page test.php et que je le met sur mon serveur web, j'obtient toujours "hors ligne" !
Help !

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 01 déc. 2011, 20:12
par xTG
Pourquoi @ ? S'il y a une erreur (comme c'est surement le cas) tu en viens à te demander pourquoi car elles sont masquées.
Et donc au final tu viens demander ici quelque chose que tu aurais pu régler tout seul. ;)

Il y a fort à parier que les ports de sortie du serveur sont fermés, ou bien que les fonctions liées aux sockets soient désactivées sur ton hébergement.

A noter aussi que j'espère que ce n'est qu'une partie de ton code... Car sinon il manque la variable $server. ;)

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 01 déc. 2011, 21:08
par rolexiss
je dois admettre que j'ai piqué ce code et d'ailleur je ne comprend pas a quoi cert cette variable...
J'avais juste besoin d'un petit bout de code pour afficher si mon serveur était en ligne ou pas...
et comme j'ai pas envie de me replonger dans le php (pas le temp), j'allais bêtement demander un code correct...
s'il y avai une fonction ping() je ferai tous implement ça:
<?php
if ping(addr='2.1.8.184' port='25565' (true))
{
echo "EN LIGNE";
}
else
{
echo "HORS LIGNE";
}
?>

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 01 déc. 2011, 21:08
par rolexiss
Des idées ?

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 01 déc. 2011, 22:49
par xTG
Dans ce cas regardes simplement la documentation de la fonction :
http://fr2.php.net/fsockopen
Ce n'est pas bien compliqué à comprendre, surtout avec les exemples. ;)

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 00:15
par rolexiss
Bon j'y suis (la connexion UDP est acceptée par mon serveur):
<?php
$fp = fsockopen("udp://0.0.0.0", 25565, $errno, $errstr);
if (!$fp) {
    echo "HORS LIGNE";
} else {
    fwrite($fp, "\n");
    echo "EN LIGNE";
    fclose($fp);
}
?>
C'est mieux non ?

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 09:20
par Mazarini
Oui, c'est mieux, mais est ce que ca marche ?

Lorsqu'il y a une erreur, il faudrait afficher les variables $errno et $errstr en plus de "Hors ligne".
je ne suis pas sur que le fwrite soit utile.

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 14:28
par rolexiss
non, ça ne marche pas... ça me fait une grosse erreur, http://pyrominecraft.netau.net/?page_id=61
(j'ai enlevé la fonction fwrite)

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 15:21
par Spols
Pourquoi essaye tu de te connecter sur 0.0.0.0 puisque ce n'est manifestement pas l'ip de ton serveur ?

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 16:42
par rolexiss
oui c'est vrai, mais cependant même si ce n'était pas la bonne adresse, le code devrait afficher hors-ligne au lieu de l'erreur connexion refusée ! ça ne fonctionne pas même avec la bonne IP.

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 16:45
par Spols
Si ton code contient toujours le @ juste avant le fsockopen il ne devrait pas y avoir de message d'erreur. C'est justement son utilité masquer les messages d'erreurs. Comme il est probable que la fonction gènère une erreur si ton serveur est offline, il sera important de l'y mettre. MAIS après que ton code soit vérifié et certifié fonctionnel. Car lors du developpement, les messages d'erreur sont les sources principales de debugage

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 16:47
par rolexiss
ya pas de @ avant. je dois le mettre où la dedans :
<?php
$fp = fsockopen("2.1.208.48", 25565, $errno, $errstr);
if (!$fp) {
echo '<br /></strong><span style="color: #ffffff; background-color: red;"> <strong>HORS LIGNE </strong></span><br />';
}
else
{
echo '<span style="color: #ffffff; background-color: #008000;"> <strong>EN LIGNE </strong></span>';
fclose($fp);
}
?>
enfin toujours est-il que mon serveur est en ligne et il tourne parfaitement et que ma page indique tjr "HORS-LIGNE" + l'erreur

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 17:14
par xTG
Si l'adresse est correcte alors c'est que le port que tu utilises est bloqué sur ton hébergement web.
Tu ne pourras pas tester la disponibilité de cette IP sur ce port.
Ton serveur de jeu possède-t-il une autre application dessus ? Genre un serveur web ?

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 17:35
par rolexiss
non, mon serevur de jeux n'a pas de serveur web...

Re: Pourquoi mon code ne fonctionne pas ?

Posté : 02 déc. 2011, 18:56
par xTG
Dans ce cas va falloir te débrouiller autrement.
Car ton serveur web (celui de ton hébergement du site) ne doit pas avoir d'autres ports ouvert que le 80...

A la rigueur ce que tu peux faire si la base de données de ton hébergement web est accessible depuis un autre serveur :
- modifier le code du serveur de jeu pour enregistrer une donnée dans une table toutes les X minutes.
- sur ta page de statut récupérer cette données et si elle date de plus de X minutes + délai_d_erreur alors indiquer que le serveur est hors ligne.