SAMP-Server mit PHP Starten

Das Problem mit der hohen CPU-Auslastung kann ich mir nicht so recht erklären, da du lediglich einen neuen Prozess forkst, und dieser somit nicht im PHP-Prozess laufen muss (was eine hohe CPU-Time erklären könnte). Eventuell ist die verwendete Standardkonfiguration des SAMPs suboptimal und führt zum Umschreiben auf den Swap, etc (was ich aber ernsthaft bezweifle).

Für Windows habe ich jetzt nur noch "start" für die Standardkonsole gefunden. Der Prozess lässt sich so in einem "neuen Fenster" (so hört es sich zumindest an) starten. Auf *NIX-Plattformen würde es genügen ein Ampersand hinter den Aufruf zu hängen um ihn in den Hintergrund zu schicken, Windows beherrscht das natürlich mal wieder nicht, oder wenn dann für meine Augen verborgen...

Code:
$: start /?

Startet ein eigenes Fenster, um ein bestimmtes Programm oder einen Befehl
auszuführen.

START ["Titel"] [/D Pfad] [ /I ] [/MIN] [/MAX] [/SEPARATE | /SHARED]
      [/LOW | /NORMAL | /HIGH | /REALTIME] | /ABOVENORMAL | /BELOWNORMAL]
      [/AFFINITY <Hex.-Affinität>] [/WAIT] [ /B ] [Befehl/Programm]
      [Parameter]

  "Titel"     Der Titel des neuen Fensters.
  Pfad        Startverzeichnis.
  B           Startet Anwendung, ohne ein neues Fenster zu öffnen. Die
              Anwendung ignoriert STRG+C. Wenn die Anwendung nicht
              selbständig STRG+C überprüft, ist STRG+UNTBR die einzige
              Möglichkeit, um die Anwendung abzubrechen.
  I           Die CMD.EXE beim Aufruf übergebene Umgebung soll die neue
              aktuelle Umgebung sein.
  MIN         Startet das Fenster minimiert.
  MAX         Startet das Fenster maximiert.
  SEPARATE    Startet 16-Bit-Windows-Programm in separatem Speicherbereich.
  SHARED      Startet 16-Bit-Windows-Programm in gemeinsamen Speicherbereich.
  LOW         Startet Anwendung in IDLE-Prioritätsklasse.
  NORMAL      Startet Anwendung in der NORMAL-Prioritätsklasse.
  HIGH        Startet Anwendung in der HIGH-Prioritätsklasse.
  REALTIME    Startet Anwendung in der REALTIME-Prioritätsklasse.
  ABOVENORMAL Startet Anwendung in der ABOVENORMAL-Prioritätsklasse.
  BELOWNORMAL Startet Anwendung in der BELOWNORMAL-Prioritätsklasse.
  AFFINITY    Die neue Anwendung verwendet die als hexadezimale Zahl
              angegebene Prozessoraffinitätsmaske.
  WAIT        Startet die Anwendung und wartet auf deren Ende.
  Befehl/Programm
              Wenn ein interner Befehl oder eine Batchdatei verwendet wird,
              wird das neue CMD-Fenster mit Parameter /K gestartet.
              Das bedeutet, dass das Fenster erhalten bleibt, nachdem der
              Befehl ausgeführt wurde.
              Wenn dies nicht der Fall ist, wird das Programm entweder
              als Anwendung in einem Fenster oder als Konsolenanwendung
              gestartet.
  Parameter   Parameter, die an den Befehl oder das Programm übergeben werden
              sollen.

Hinweis: Die Optionen SEPARATE und SHARED werden auf 64-Bit-Plattformen
nicht unterstützt.

Wenn die Befehlserweiterungen aktiviert sind, wird der Aufruf von externen
Befehlen durch die Befehlszeile oder den START-Befehl folgendermaßen verändert:

Nicht-ausführbare Dateien können durch ihre Zuordnung zu einem Dateityp
    einfach durch Eingabe des Namens als Befehl aufgerufen werden (z. B. würde
    WORD.DOC die Anwendung starten, die der .DOC-Erweiterung zugeordnet ist).
    Weitere Informationen, wie Sie diese Zuordnungen innerhalb eines Befehls-
    skripts ändern, finden Sie beim ASSOC- bzw. FTYPE-Befehl.

Wird eine grafische 32-Bit-Anwendung aufgerufen, wartet CMD.EXE nicht auf
    das Beenden dieser Anwendung, sondern kehrt sofort zur Eingabeauforderung
    zurück. Das gilt NICHT, wenn diese Anwendung aus einem Befehlsskript
    heraus aufgerufen wird.

Wenn eine Befehlszeile ausgeführt wird, die mit den Zeichen CMD ohne
    Erweiterung oder Pfadname beginnt, wird CMD durch den Wert der
    COMSPEC-Variablen ersetzt. Damit wird vermieden, dass man versehentlich
    eine andere, ggf. zufällige Version der CMD.EXE verwendet.

Wenn eine Befehlszeile ausgeführt wird, die mit Zeichen beginnt, die keine
    Dateierweiterung enthalten, dann verwendet CMD.EXE den Wert der Umgebungs-
    variablen PATHEXT, um zu bestimmen, welche Erweiterungen in welcher
    Reihenfolge verwendet werden. Der Standardwert für die PATHEXT-Variable
    ist:

        .COM;.EXE;.BAT;.CMD

    Dabei ist die Syntax dieselbe wie in der PATH-Variablen, das heißt, die
    einzelnen Einträge werden durch Semikolon getrennt.

Wenn mit dem START-Befehl ein Programm bzw. Befehl aufgerufen wird und keine
entsprechende Dateierweiterung gefunden wird, aber der Name ohne Erweiterung
einem Verzeichnisnamen entspricht, wird der Explorer mit diesem Pfad
aufgerufen. Von der Befehlszeile ausgeführt entspricht das einem CD /D mit
diesem Pfad.

Habe keine Ahnung, ob es damit getan ist, aber setz es einfach mal entsprechend ein:
PHP:
<?php
  error_reporting(E_ALL | E_NOTICE); 
  ini_set('display_errors','on');

$handle = popen('start /D "C:/samp" /MIN /B "samp-server"', 'r');
echo "$handle<br/>" . gettype($handle) . "\n";
echo "server gestartet";
// gewollt nicht den Pointer schließen (?)
// pclose($handle);

Stelle mir das nur etwas lästig vor, wenn dann immer eine neue Windowskonsole mit aufploppt... Alternativ dazu kannst du mit Cygwin oder ähnlichem *NIX-Vorteile genießen, und ein einfaches Ampersand hinter den Befehl schreiben.
 
Also wenn er mit PHP den server starte haben folgende Prozesse 0% cpu auslastung.
csrss.exe
samp-server.exe
Und das problehm ist halt das es wirklich dauerhaft ist auch wenn ich das laden der seite abreche und den apach server beende.
bleibt die auslastung der beiden prozesse gleich.

ich glaube ich werde wohl nicht drum rum kommen es mit action script und flasch zu machen. da es da ja zu funktionieren scheint.

Ich bin euch dankebar für eure hilfe.

Ich werde mal sehn was sich machen läst.

bei iner sachen könnte ihr mir villeicht noch nen tip geben ist es möglich die windows console in php zu intigrieren?
Weil das wäre warschelich auch noch eine möglichkeit das problehm zu lösen.
 
Hab da jetzt mal was versucht
PHP:
<?php
  error_reporting(E_ALL | E_NOTICE); 
  ini_set('display_errors','on');
 
$handle = popen('start "C:/samp" /MIN /B "samp-server"', '/r');
echo "$handle<br/>" . gettype($handle) . "\n";
echo "server gestartet";
pclose($handle);
?>

das Ergebnis ist die datei crashinfo.exe mit dem inhat.

Code:
Exception At Address: 0x0046A7D1



Registers:

EAX: 0x00120116	EBX: 0x00000000	ECX: 0x0000D7FF	EDX: 0x00001798

ESI: 0x7C8716CD	EDI: 0x7C812CA9	EBP: 0x7C802530	ESP: 0x0083FD9C

EFLAGS: 0x00010206



Stack:
 
Ohne nen anständigen Debugger wird es schwer dieses Problem zu orten. Hast du den Befehl einfach mal so über die Kommandozeile laufen lassen? Und welcher Prozess genau stürzt mit der Fehlermeldung ab?
 
Die server exe ist ja ein reines cmd programm deswegen wüsste ich nicht wie ich das machen soll denn wenn ich es über die console starte t es ja auch.
 
Zurück