nietaL
NGBler
Hey Leute,
ich möchte per PHP-Skript (exec) eine batch-Datei starten, die ihrerseits wiederum neben ein paar anderen Dingen einen Server (exe) startet.
Klicke ich die BAT manuell an, funktioniert alles tadellos. Versuche ich es indirekt über das PHP-Skript, taucht die Server-Exe ca. eine Sekunde im Taskmanager auf und verschwindet dann wieder. Das PHP-Skript hängt sich auf und endet nach ner Zeit mit nem 500-Error. Im Taskmanager sieht man im Hintergrund verbleibend eine cmd.exe und parallel dazu eine conhost.exe. Bei jedem Versuch, mit PHP den Server zu starten, kommt so ein Pärchen dazu.
Das komplette Konstrukt hatte auf einem anderen Server schon einmal funktioniert. Erst seit dem Umzug zickt es rum. Ich denke, dass es etwas mit Windows-Rechten zu tun hat. Oder blockt irgendein Sicherheitssystem den Hintergrundprozess?
Ich würde mich über einen Work-Around freuen. Wie kann ich vorgehen, um dem Problem auf die Schliche zu kommen?
PHP-Skript
[src=php]
<?php
ob_start();
$size = ob_get_length();
header("Content-Length: ".$size);
header('Connection: close');
ob_end_flush();
ob_flush();
flush();
session_start();
@session_write_close();
set_time_limit(0);
ignore_user_abort(true);
error_reporting(E_ALL);
exec("start OurAltis_start.bat", $output, $return_var);
echo "output: <br>";
print_r($output);
echo "<br><br>return: <br>";
print_r($return_var);
exit;
?>
[/src]
BATCH
[src=text]
@echo off
setlocal
set "ProgPath=D:\arma3server\arma3files"
set "Prog=arma3server_x64.exe"
for /f "delims=" %%l in ('for /f "skip=3 tokens=2" %%p in ^('tasklist /fi "imagename eq %Prog%"'^) do @^<NUL set /p "=%%p "') do (
set "PIDs=%%l"
)
start "%Prog%" "%ProgPath%\%Prog%" -profiles=C:\inetpub\vhosts\isleofmine.de\httpdocs\webgui\interface\Profil+Logs -config=ouraltis_server.cfg -port=2302 -world=empty -noSound -filePatching -enableHT -mod=@CBA_A3 -servermod=@extDB3;
for /f "skip=3 tokens=2" %%p in ('tasklist /fi "imagename eq %Prog%"') do (
echo %PIDs% | find "%%p" > NUL || if not defined NewPID set "NewPID=%%p"
)
if defined NewPID echo Neue Instanz: %NewPID%
echo %NewPID% > PID.txt
[/src]
ich möchte per PHP-Skript (exec) eine batch-Datei starten, die ihrerseits wiederum neben ein paar anderen Dingen einen Server (exe) startet.
Klicke ich die BAT manuell an, funktioniert alles tadellos. Versuche ich es indirekt über das PHP-Skript, taucht die Server-Exe ca. eine Sekunde im Taskmanager auf und verschwindet dann wieder. Das PHP-Skript hängt sich auf und endet nach ner Zeit mit nem 500-Error. Im Taskmanager sieht man im Hintergrund verbleibend eine cmd.exe und parallel dazu eine conhost.exe. Bei jedem Versuch, mit PHP den Server zu starten, kommt so ein Pärchen dazu.
Das komplette Konstrukt hatte auf einem anderen Server schon einmal funktioniert. Erst seit dem Umzug zickt es rum. Ich denke, dass es etwas mit Windows-Rechten zu tun hat. Oder blockt irgendein Sicherheitssystem den Hintergrundprozess?
Ich würde mich über einen Work-Around freuen. Wie kann ich vorgehen, um dem Problem auf die Schliche zu kommen?
PHP-Skript
[src=php]
<?php
ob_start();
$size = ob_get_length();
header("Content-Length: ".$size);
header('Connection: close');
ob_end_flush();
ob_flush();
flush();
session_start();
@session_write_close();
set_time_limit(0);
ignore_user_abort(true);
error_reporting(E_ALL);
exec("start OurAltis_start.bat", $output, $return_var);
echo "output: <br>";
print_r($output);
echo "<br><br>return: <br>";
print_r($return_var);
exit;
?>
[/src]
BATCH
[src=text]
@echo off
setlocal
set "ProgPath=D:\arma3server\arma3files"
set "Prog=arma3server_x64.exe"
for /f "delims=" %%l in ('for /f "skip=3 tokens=2" %%p in ^('tasklist /fi "imagename eq %Prog%"'^) do @^<NUL set /p "=%%p "') do (
set "PIDs=%%l"
)
start "%Prog%" "%ProgPath%\%Prog%" -profiles=C:\inetpub\vhosts\isleofmine.de\httpdocs\webgui\interface\Profil+Logs -config=ouraltis_server.cfg -port=2302 -world=empty -noSound -filePatching -enableHT -mod=@CBA_A3 -servermod=@extDB3;
for /f "skip=3 tokens=2" %%p in ('tasklist /fi "imagename eq %Prog%"') do (
echo %PIDs% | find "%%p" > NUL || if not defined NewPID set "NewPID=%%p"
)
if defined NewPID echo Neue Instanz: %NewPID%
echo %NewPID% > PID.txt
[/src]