Pourquoi mon code ne fonctionne pas ?

Petit nouveau ! | 9 Messages

01 déc. 2011, 19:45

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 !

ViPHP
xTG
ViPHP | 7331 Messages

01 déc. 2011, 20:12

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

Petit nouveau ! | 9 Messages

01 déc. 2011, 21:08

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";
}
?>
Modifié en dernier par rolexiss le 01 déc. 2011, 21:09, modifié 2 fois.

Petit nouveau ! | 9 Messages

01 déc. 2011, 21:08

Des idées ?
Modifié en dernier par rolexiss le 02 déc. 2011, 00:07, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

01 déc. 2011, 22:49

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

Petit nouveau ! | 9 Messages

02 déc. 2011, 00:15

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 ?

ViPHP
ViPHP | 2577 Messages

02 déc. 2011, 09:20

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.

Petit nouveau ! | 9 Messages

02 déc. 2011, 14:28

non, ça ne marche pas... ça me fait une grosse erreur, http://pyrominecraft.netau.net/?page_id=61
(j'ai enlevé la fonction fwrite)

Mammouth du PHP | 1967 Messages

02 déc. 2011, 15:21

Pourquoi essaye tu de te connecter sur 0.0.0.0 puisque ce n'est manifestement pas l'ip de ton serveur ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 9 Messages

02 déc. 2011, 16:42

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.

Mammouth du PHP | 1967 Messages

02 déc. 2011, 16:45

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
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Petit nouveau ! | 9 Messages

02 déc. 2011, 16:47

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

ViPHP
xTG
ViPHP | 7331 Messages

02 déc. 2011, 17:14

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 ?

Petit nouveau ! | 9 Messages

02 déc. 2011, 17:35

non, mon serevur de jeux n'a pas de serveur web...

ViPHP
xTG
ViPHP | 7331 Messages

02 déc. 2011, 18:56

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.