Sam: Programm (Linux Gameserver) per Webinterface starten

Hallo,

ich betreibe einen CS-Gameserver unter Linux und suche nach einer Möglichkeit, diesen per Webinterface zu starten.

Der Aufruf erfolgt unter Linux folgendermaßen

./hlds_run -game cstrike +maxplayers 16 +map de_dust -port 27016

Diese Zeile habe ich in die Datei cs geschrieben und der Aufruf mittels ./cs sowie bash cs funktioniert einwandfrei.

Nun möchte ich, wie gesagt, den Programmstart per Webbrowser ermöglichen und habe dafür auf meinem Webserver die Datei csstart.php angelegt, sodass der Gameserver mit www.meinedomain.de/csstart.php gestartet werden soll.

Folgende Varianten habe ich in dieser Datei bereits ausprobiert (nur einige Beispiele um zu zeigen auf welchem (Irr)weg ich mich befinde):

<?php
$output = shell_exec('/home/g/gameserver/hlds/cs');
?>
--------------------
<?php
shell_exec('/home/g/gameserver/hlds/cs');
?>
--------------------
<?php
exec('/home/g/gameserver/hlds/cs');
?>
--------------------
<?php
exec('/home/g/gameserver/hlds/./cs');
?>
-------------------

u.v.m.

Ich hab auch schon die ' durch " ersetzt und die gesamte Befehlszeile eingesetzt (also /home/g/gameserver/hlds/./hlds_run -game cstrike ...), aber es tut sich einfach nichts.
Das Programm soll einfach nur gestartet werden. Ich benötige keinerlei Rückmeldung.

Bin ich nun auf dem völlig falschen Weg, oder ist es nur eine Kleinigkeit, die ich übersehen habe?

Bin für jeden Vorschlag dankbar!

Gruß
Sam

  1. Hi!

    Folgende Varianten habe ich in dieser Datei bereits ausprobiert (nur einige Beispiele um zu zeigen auf welchem (Irr)weg ich mich befinde):

    <?php
    $output = shell_exec('/home/g/gameserver/hlds/cs');
    ?>

    Was gibt er denn aus, wenn du den obigen Code noch zu ergänzt:

    echo "<pre>\n";
    print_r($output);
    echo "</pre>\n";

    Wie schaut es den mit den Rechten aus? Von wem darf den der Gameserver gestartet werden? In deinem Falle wird das Programm mit den Rechten des PHP-Deamons gestartet. Darf dieser das Skript ausführen?

    Grüße,
    Fabian St.

    --
    Endlich online: http://fabis-site.net
    --> XHTML, CSS, PHP-Formmailer, Linux
    Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
    1. Hi!

      Mensch, mach ich heute viele Rechtschreibfehler...

      Folgende Varianten habe ich in dieser Datei bereits ausprobiert (nur einige Beispiele um zu zeigen auf welchem (Irr)weg ich mich befinde):

      <?php
      $output = shell_exec('/home/g/gameserver/hlds/cs');
      ?>

      Was gibt er denn aus, wenn du den obigen Code noch so ergänzt:

      echo "<pre>\n";
      print_r($output);
      echo "</pre>\n";

      Wie schaut es denn mit den Rechten aus? Von wem darf denn der Gameserver gestartet werden? In deinem Falle wird das Programm mit den Rechten des PHP-Deamons gestartet. Darf dieser überhaupt das Skript ausführen?

      Grüße,
      Fabian St.

      --
      Endlich online: http://fabis-site.net
      --> XHTML, CSS, PHP-Formmailer, Linux
      Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
      1. Was gibt er denn aus, wenn du den obigen Code noch so ergänzt:

        echo "<pre>\n";
        print_r($output);
        echo "</pre>\n";

        Im Browser erfolgt keine Ausgabe und der Quelltext der ausgegebenen Seite besteht ausschließlich aus <pre></pre>

        Wie schaut es denn mit den Rechten aus? Von wem darf denn der Gameserver gestartet werden? In deinem Falle wird das Programm mit den Rechten des PHP-Deamons gestartet. Darf dieser überhaupt das Skript ausführen?

        hlds_run chmod 714
        cs chmod 755

        Gruß
        Sam

        1. Hi!

          hlds_run chmod 714
          cs chmod 755

          Setze mal chmod 755 für hdls_run. Bei chmod 714 hat man nämlich kein Ausführungsrecht.                             |--> nur lesen!

          Grüße,
          Fabian St.

          --
          Endlich online: http://fabis-site.net
          --> XHTML, CSS, PHP-Formmailer, Linux
          Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
          1. Setze mal chmod 755 für hdls_run. Bei chmod 714 hat man nämlich kein Ausführungsrecht.                             |--> nur lesen!

            Hab ich schon ausprobiert. Funktionierte auch nicht.

  2. Hallo,

    <?php
     exec('/home/g/gameserver/hlds/cs', $output, $error);
     if ($error) {
       echo "Error: ";
       print_r($output);
       exit;
     }
    ?>

    http://de2.php.net/manual/en/function.exec.php

    Beachte bitte auch:
    Note: If you start a program using this function and want to leave it running in the background, you have to make sure that the output of that program is redirected to a file or some other output stream or else PHP will hang until the execution of the program ends.

    Note: When safe mode is enabled, you can only execute executables within the safe_mode_exec_dir. For practical reasons it is currently not allowed to have .. components in the path to the executable.

    viele Grüße

    Axel

    1. <?php
       exec('/home/g/gameserver/hlds/cs', $output, $error);
       if ($error) {
         echo "Error: ";
         print_r($output);
         exit;
       }
      ?>

      Das erzeugt im Browser die Ausgabe:

      Error: Array()