Entwickler-Ecke

Programmiersprachen (Server) - [PHP] Gameserver starten und auslesen


Nano-Ware - Do 23.06.11 18:15
Titel: [PHP] Gameserver starten und auslesen
Hey,

ich möchte gern per PHP einen Server starten. Ich hab das unter Windows mit exec('abc.exe'); gemacht. Der Server startet auch, aber der PHP Script läd und läd.. Ist ja auch klar er wartet ja darauf, dass die Anwendung beendet wird, das wird sie aber ja nicht.
Das ist Problem 1.

Jetzt möchte ich mit einer 2. PHP Datei die Ausgaben der Konsole (Gameserver) per echo ausgeben. Nur wie das geht weiß ich garnicht. Das Prinzip ist folgendes:

*/start.php -> startet den Server
---------------------------------
*/read.php -> gibt den aktuellen Stand der Konsole aus, also den gesammten Text der Konsole.

Ist das überhaupt realisierbar? Es ist eigentlich doch recht wichtig das zu schaffen.


Ich hab mit XAMPP unter Windows experimentiert und habs geschafft mit ner vorgeschalteten *.bat Datei die exe zu starten. Ich glaub allerdings kaum, dass man jetzt noch mit einem PHP-Script den Inhalt der Konsole auslesen kann oder?

<?php
exec('abc.bat);
?>

-abc.bat

start abc.exe



Danke


Moderiert von user profile iconChristian S.: Topic aus Off Topic verschoben am So 15.07.2012 um 12:54


Niko S. - Do 23.06.11 20:57

Häng den Output an eine Datei und lies die Datei aus.


Nano-Ware - Do 23.06.11 23:02

Könntest du mir einen Beispielcode in PHP geben? Ich kann nämlich nur mit PHP arbeiten alle anderen Möglichkeiten bleiben mir verwehrt.

Nur, dass ich es gesagt hab (; ich will nicht dass ihr meine Programme schreibt, aber ich stehe hier seit langem vor einem Problem...

Danke (:


Niko S. - Do 23.06.11 23:06

Ich glaub in windows geht das "app.exe > logdatei.log" bin mir aber nicht ganz sicher.
Und Auslesen einer Datei findest du ja zu hauf im Netz. http://www.schattenbaum.net/php/datei.php


Nano-Ware - Fr 24.06.11 01:31

Ich hab das so in die exec Funktion geschrieben und eine Sache klappt schonmal, er erstellt die log-Datei und schreibt die Ausgabe rein (: Allerdings läd die "start.php" trotzdem unendlich weiter..
Das gute ist, schließe ich jetzt den Tab, in dem die PHP Datei so lange läd, loggt er trotzdem weiter. Wie lange loggt die Apache denn jetzt noch die Anwendung? Oder wird die jetzt "unendlich" lang geloggt bis die exe geschlossen wird?

Aber vorher: Ich hab die Frage auch schonmal vor 2 Wochen in nem anderen Forum gefragt und da kam nur Müll.. Ich bin dir wirklich total dankbar!

Jetzt muss ich nur noch die Sache mit dem "unendlichem" Laden in den Griff bekommen, weil exec() ja solange läd, bis die Anwendung/Befehl beendet ist. Aber eigentlich möchte ich die Anwendung ja nur starten und loggen.

EDIT:// Der PHP Script soll ja auch unter Linux laufen, wie sieht das da mit dem app.exe > log.txt aus?


jaenicke - Fr 24.06.11 02:04

Unter Linux gibts keine .exe Dateien. :D

Was das asynchrone Ausführen angeht:
http://stackoverflow.com/questions/222414/asynchronous-shell-exec-in-php


Nano-Ware - Fr 24.06.11 10:35

Das war mir klar (: Ich wollte nur wissen, wie ich ne Linux Anwendung ausführen kann, und genauso wie ichs jetzt bei Windows hab ne Log-Datei erstellen kann.

Es haben sich jetzt allerdings doch noch Fragen gestellt. Wenn der Server 24h/7 läuft wird die Log-Datei wohl schnell sehr groß. Gibt es eine Möglichkeit, ohne den Server zu beenden mit PHP die logdatei zu bereinigen? Also, dass diese einfach da weiter loggt wo sie aufgehört hat?


ALF - Fr 24.06.11 11:04

Dein Gamesserver erstellt doch(zu mindestens bei die, die ich kenne ET COD4 usw) automatisch ne log.
Wenn die maxgrösse erreicht ist, wird eine neue erstellt und die andere gezippt.

Allerdings kannst Du die Daten selber auslesen, über udp und brauchst nicht die Log datei. Schau dier mal HLSW an, die machen auch nichts anderes!

Gruss Alf


Nano-Ware - Fr 24.06.11 12:46

Mein Server erstellt nicht automatisch ne Log-Datei und die Infos die ich will bekomm ich nicht per UDP Zugriff (:


ALF - Fr 24.06.11 13:27

mh...

Wenn (unter Windows) deine Exe keine Rückmeldung nach aussen gibt als Server, hast Du ja nur die Möglichkeit zu prüfen im Taskmanager ob das Prog läuft oder abgeschmiert ist. Denn das reine ausführen über eine .bat mit Parameter bringt dir ja nix. Das sagt ja nix aus.

Unter Linux genau das selbe. Dort kannst Du zwar mit pipes die Meldung vom System abfragen ob der Prog, Server gesartet ist, aber das wars dann auch schon. Ob Dein Server richtig läuft, merkst Du eh erst wenn Du dann damit was machen willst.

Also bleibt Dir eh nur, Start Stop evtl noch Status als parameter ob er noch aktiv ist, und das war es.
Alles andere müsste nähmlich dein Server selbst liefern.

Gruss Alf


Nano-Ware - Fr 24.06.11 14:37

Oben hat doch jemand die methode "app.exe > log.txt" gepostet. Ich kann aus dieser log.txt alles auslesen was ich brauch. Aber die muss halt erstellt werden und eventuell auch ab und zu geleer denn wenn jemand mal die Log-Datei von nem anderen Rechner analysieren will und erst 2GB Text herunterladen und analysieren muss ist das nicht der sinn der sache (:


ALF - Fr 24.06.11 15:42

Na wenn Du ne log hast, dann liefert der Sever das was Du brauchst. Du hast es nur nicht ausgelesen, wenn ich es richtig verstanden habe.
Unter Linux weiss ich, kann man sogar filtern was in der Log stehen soll bzw wie gross sie sein soll. Wie das unter Windows ist hab ich noch nichts gesehen.
Was die Grösse angeht, das haben Server logs nun mal so an sich.
Allerdings ist es doch so, wenn kein Zugriff auf den Server wird auch nichts geschrieben.
Oder sollte es bei Dir anders sein?

Gruss Alf


MDX - Sa 25.06.11 16:09

Wäre praktisch wenn du mal schreiben würdest was das für eine Gameserver ist :lol: