(Mod. korjasi otsikon.)
Moi!
Olen tekemässä omaa nettisivu omalle palvelimelle (siis jota voin ihan käsin liikutella ;D) Mutta tein kokeilu sivuston siitä, että saisinko esim. peli serverin päällä ole tilanteen näkyviin. Pitkän ja hartaan kokeilu/selvittelyn jälkeen ei ollut muuta mahdollisuutta kuin postata tänne. Eli kuinka saan PHPssä serverin tilanteen omalle nettisivulleni? Löysin koodeja ja kokeilin, mutta aina näkyy että ei ole päällä (siis tämä peliserveri). Koodissa tuskin on vikaa. Pitääkö esim. omia portteja/PHP asetuksia muuttaa jotenkin?
Kiitos jo etukäteen! :D
Riippuu ihan siitä peliserveristä ja käyttöjärjestelmästä. Muista laittaa virheilmoitukset näkyviin.
Siis virheilmoituksia ei tule ja koodi on toimiva, koska muitten demo sivuilla se toimii.
Minun sivulla se vain näyttää että serveri on kiinni.
Koodi oli tälläinen:
<?php $server_ip = "111.111.111.111"; $server_port = 11111; $fp = @fsockopen($server_ip, $server_port, $errno, $errmsg, 1); $status = ($fp ? "<span style='color: rgb(0,255,0)'>Päällä</span>" : "<span style='color: rgb(255,0,0)'>Kiinni</span>"); print $status; ?>
Kokeilin myös tälläistä: http://www.webmaster-source.com/2012/07/05/checking-the-status-of-a-minecraft-server-with-php/
Mutta senkään demo minkä latasin omalle palvelimelle näyttää että kaikki serverit on kiinni. Mutta julkaisijan omassa demossa serverit on päällä:
http://www.webmaster-source.com/static/demos/mcserverstatus/
Voisiko kyse olla siis jonkin laisista estoista jotka ovat esim. PHP Versio 5.4.9 olla joitakin estoja oletuksena?
Et kertonut vieläkään peliä etkä käyttöjärjestelmää. Tosin linkeistä päätellen kyseessä on Minecraft.
PHP:ssä ei ole mitään erityisiä estoja oletuksena.
Virheilmoitukset eivät ole vain koodin virheitä varten, vaan niistä voisi nähdä myös, miksi se ei toimi sinulla. Esimerkiksi jos PHP:ssä olisi jokin rajoitus, siitä tulisi virheilmoitus. @-merkki piilottaa virheilmoitukset, mutta se on tuossa koodissa tarpeellinen, koska kiinni oleva palvelin aiheuttaa aina virheen ja koodin toiminta perustuu siihen. Kuitenkin voisit ottaa sen @-merkin hetkeksi pois, niin näkisit, mikä menee pieleen.
Kai huomioit, että pelipalvelimesi ip ei varmasti ole 111.111.111.111 eikä porttikaan varmaan ole 11111? Jos pelipalvelin on samalla koneella kuin PHP-tulkki, laita osoitteeksi 127.0.0.1. Netissä lukee, että Minecraftin oletusportti olisi 25565.
Juu eli tosiaan peli on Minecraft ja kyllä olen huomannut tuon ip/portti kohdan! ;)
Serverini toimii omalle koneellaan ja nettisivu palvelin omallaan.
Nettisvu palvelin on KSWEB ja palvelin toimii Android pohjalla. Tiedän että Android ei ole paras serverin hosti pohja, mutta syynä on se, että kyseessä on Android Mini PC 1RAM.
Vai johtuuko se jostakin Androidin estoista? Syy minkä takia en kovin miellellään pohjaa vaihtaisi on se että netti laitteeseen tulee WiFin kautta. (Ajurit ei välttämättä toimi esim. Ubuntu serverissä)
KSWEB ohjelma toimii hyvin ja antaa muokata PHPn asetuksia. (Mukaan lukien MySQL) Anteeksi, kun en antanut tarvittavia tietoja heti alkuun.
Eli onko ongelmaan ratkaisua vai pysähtyikö kaikki katsomaan palvelin ratkaisuani? ;)
Edelleenkin todennäköisin syy ongelmaasi on, että olet kirjoittanut IP-osoitteen tai portin väärin. Millä tavalla olet selvittänyt ne?
Voisit myös ottaa tuosta koodista @-merkin pois ja kertoa, mikä virheilmoitus silloin tulee.
Poistin tuon @ merkin ja kokeilin uudestaan, mutta tulos on sama. Vaikka serveri on päällä (Testasin löytääkö esim. tämä sen ja se näytti, että päällä). Eli koodissa ei ole vikaa... Voisiko tosiaan vika olla tuossa Androidissa?
Kiitos Metabolix, että autat!
Niin tai mitä jos se IP-osoite on edelleenkin väärä? Kysyin jo äsken, miten olet selvittänyt osoitteen ja portin. Lähiverkossa pitää yleensä käyttää lähiverkon osoitetta eikä nettipuolen osoitetta.
Jos vika olisi Androidissa, kyseisellä koneella ei luultavasti saisi yhteyttä mihinkään nettiin. Voit tietenkin etsiä jonkin muun Minecraft-palvelimen osoitteen ja kokeilla, mitä koodi siitä sanoo.
Testasin sitä erillisellä palvelimella. Tässä koodi.
<?php $server_ip = "murocraft.fi"; $server_port = 25565; $fp = fsockopen($server_ip, $server_port, $errno, $errmsg, 1); $status = ($fp ? "<span style='color: rgb(0,255,0)'>Päällä</span>" : "<span style='color: rgb(255,0,0)'>Kiinni</span>"); print $status; ?>
Murocraftin kotisivuilla näkyy' että servu on päällä http://murocraft.com/
Ip ja portti on oikein nettisivun mukaan. Palvelimessani on kyllä netti.
Kopsasin tollaisenaan koodisi omalle palvelimelle ja kokeilin, näytti että päällä on.
No miks mulla ei suostu toimii, vaikka kuinka rassaan? Tää ei oo normaalii.......
Tulosta $errno ja $errmsg -muuttujien sisällöt.
errmsg tulee
php_network_getaddresses: gethostbyname failed. errno=2
ja errno tulee
0
errmsg tajusin, että se ei saa yhteyttä tohon osoitteesen...
Estääkö palomuuri pääsyn? Itselläni oli joskus moinen ongelmana CoD serverin kanssa... Tuolloin vikaa en saanut korjattua.. Pitäisi kokeilla josko nyt saisi pystyyn serverin ja tilasto sivuston siihen kylkeen... :P
Kumpi on yleisempi. Se että Androidin palomuuri estää vai se että modeemin palomuuri?
Ongelmani taitaa olla aika monmutkikas... Macro mistä olet hommannut palvelimesi?
Minkä tyyppisiä palomuurin estoja on yläänsä on käytössö, kun ei saa yhteyttä serveriin. Siis mitkä suojausket pitäisi ottaa pois esim. modeemista?
Koodari harrastelija kirjoitti:
Minkä tyyppisiä palomuurin estoja on yläänsä on käytössö, kun ei saa yhteyttä serveriin. Siis mitkä suojausket pitäisi ottaa pois esim. modeemista?
Modeemit aika usein NATtaa, jolloin modeemin asetuksista pitää asettaa porttiohjaus haluttuun laitteeseen.
Nyt kuitenkin ilmeisesti ongelmana oli, että DNS-kysely Android-laitteelta nettiin päin epäonnistui. Oletko jotenkin varmistanut, että netti laitteelta toimii? Toimiiko esimerkiksi ping google.fi
tai muu vastaava komento?
Aihe on jo aika vanha, joten et voi enää vastata siihen.