Eli yritän saada tällä koodilla aikaan Minecraft serverini tilannetta:
<?php $online = @fsockopen("IP osoite", Portin numero, $errno, $errstr, 1); if($online >= 1) { echo 'Päällä!'; } else { echo 'Kiinni!'; } ?>
Mutta vaikka laitan portit ja IPn oikein niin se ilmoittaa jatkuvasti että se on kiinni.
Mikä voisi olla vikana?
Voisiko ongelmana olla tuo if lause? Eli ennemmin näin:
if($online)
Oletko edes yrittänyt selvittää vikaa? Aivan yksinkertaisin asia, jonka voit tehdä, on virheilmoitusten katsominen – tässä tapauksessa siis muuttujista $errno ja $errstr.
Ehkä palvelimeltasi ei voi ottaa yhteyttä kyseiseen osoitteeseen tai porttiin. Esimerkiksi monista webhotelleista ei voi ottaa yhteyttä kuin joihinkin yleisimpiin portteihin (kuten 80 ja 443).
Voiko tota portti juttua (siis että mihinkä portteihin voi yhdisttää) niin selvittää jotenkin? Ja lisäksi siihen ei tule virhe ilmoitusta. Se vaan näyttää että kiinni.
että jos ottais ton @ merkin pois tosta eestä nii se ei estäis mahdollisten virheiden esille suoltamista (edit: no, ei se näköjään toisaalta montaa virhettä edes esille läväyttäisi, mutta kokeile nyt kuitenki)
Sallittujen porttien testaus ei onnistu muuten kuin käymällä ne yksitellen läpi. Kokeile vaikka www.google.com portissa 80 ja katso sanooko se mitään.
Ja vielä tuli asiaa kohdasta errno:
php.net kirjoitti:
If provided, holds the system level error number that occurred in the system-level connect() call.
If the value returned in errno is 0 and the function returned FALSE, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket.
Tarkista noi kummatki.
Siellä missä tuo php-filu sijaitsee niin voit siitä koneesta ottaa telnetiltä yhteyttä minecraft servuusi. Esim ->
telnet <ip> <portti>
Jos heittää herjaa niin ei voi yhdistää eli jokin blokkaa yhteyden.
Aihe on jo aika vanha, joten et voi enää vastata siihen.