Verktyg Visningsval
2012-11-12, 22:33   #1

HerrNilsson

Medlem

HerrNilssons avatar

Plats: Skåne

Registrerad: sep 2006

Problem med att köra bat i PHP


Hejhej

Jag hjälper en polers att smälla upp en Minecraft-server som han kan stänga av/på via en webbsida.
Mitt problem är att httpd.exe äter upp all CPU, vilket jag tror betyder att det finns en loop eller liknande.
När jag anropar "Start" så står sidan och tuggar, den startar ju applikationen och kör bat-filen som den ska. Men som sagt äter httpd all CPU och sidan står och tuggar. Jag vill ju att sidan ska gå tillbaka till där den var.

Ber om ursäkt för luddig förklaring.

Fetmarkerat är mest för test, men samma problem uppstår.

Någon som vet vad jag har gjort fel?

execute.php
<?php
//Starta sessionen
session_start();

set_time_limit(5);

//Kolla om användaren inte är inloggad
if(!isset($_SESSION['username'])){
                             //Skicka vidare användaren
                             header("Location: index.php");
                             exit;
}

if($_GET['action'] == "Start") {
    exec ("E:\Minecraftserver\Server.bat");
	header("Location: service.php");
	exit;
} elseif($_GET['action'] == "Stop") {
	exec("E:\Minecraftserver\kill.bat");
	header("Location: service.php");
	exit;
} else {
	echo "Invalid parameter!";
}
header("Location: service.php");
exit;
?>
Server.bat
"C:\Program Files (x86)\Java\jre7\bin\javaw.exe" -Xms1536M -Xmx1536M -jar "E:\Minecraftserver\craftbukkit.jar" -o false
pause
Tack på förhud.
__________________
Bärbar: MacBook Pro, 16GB, 128GB SSD (dualboot Windows 7).
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413, 4st WD RED 3TB.
Stationär: ASUS P6T Deluxe v2, 18GB, i7 930, Radeon HD 5870, 180GB SSD, Win 8.1
HTPC: Intel NUC, 8GB, 120GB SSD.
HerrNilsson är uppkopplad nu
2012-11-12, 22:45   #2

DNW

Medlem

Registrerad: feb 2012

Se notes för exec() (http://se1.php.net/manual/en/function.exec.php) samt ta en extra titt på din batch-fil.
DNW är inte uppkopplad
2012-11-12, 23:50   #3

iXam

Medlem

iXams avatar

Plats: Stockholm

Registrerad: jan 2004

Server.bat returnerar ju aldrig så därför fortsätter inte ditt PHP-script.
iXam är inte uppkopplad
2012-11-13, 07:08   #4

HerrNilsson

Medlem

HerrNilssons avatar

Plats: Skåne

Registrerad: sep 2006

Citat:
Ursprungligen inskrivet av iXam Visa inlägg
Server.bat returnerar ju aldrig så därför fortsätter inte ditt PHP-script.
Tack för svar.
Nej jag tänker på det också. Men hur ska jag lösa det?
__________________
Bärbar: MacBook Pro, 16GB, 128GB SSD (dualboot Windows 7).
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413, 4st WD RED 3TB.
Stationär: ASUS P6T Deluxe v2, 18GB, i7 930, Radeon HD 5870, 180GB SSD, Win 8.1
HTPC: Intel NUC, 8GB, 120GB SSD.
HerrNilsson är uppkopplad nu
2012-11-13, 07:14   #5

firechild

Medlem

Plats: Helsingfors / Finland

Registrerad: dec 2004

Testa att köra med följande istället - det borde fungera då start-kommandot kör programmet separat och torde därmed returnera tillbaka till php. Har dock inte testat det men värt att kika på. Alternativt testa lägg in start-kommandot in i din bat-fil.

exec ("start E:\Minecraftserver\Server.bat"); 
firechild är inte uppkopplad
2012-11-13, 07:21   #6

HerrNilsson

Medlem

HerrNilssons avatar

Plats: Skåne

Registrerad: sep 2006

Citat:
Ursprungligen inskrivet av firechild Visa inlägg
Testa att köra med följande istället - det borde fungera då start-kommandot kör programmet separat och torde därmed returnera tillbaka till php. Har dock inte testat det men värt att kika på. Alternativt testa lägg in start-kommandot in i din bat-fil.

exec ("start E:\Minecraftserver\Server.bat"); 
Tack! Det fungerade helt klart bättre. httpd äter inte CPU. Dock står sidan fortfarande och tuggar och väntar på något.
EDIT: Så fort jag dödar java-processen och cmd-processen så slutar den tugga. Känns som att den väntar på något ändå.

Senast redigerad av HerrNilsson 2012-11-13 klockan 07:33.
__________________
Bärbar: MacBook Pro, 16GB, 128GB SSD (dualboot Windows 7).
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413, 4st WD RED 3TB.
Stationär: ASUS P6T Deluxe v2, 18GB, i7 930, Radeon HD 5870, 180GB SSD, Win 8.1
HTPC: Intel NUC, 8GB, 120GB SSD.
HerrNilsson är uppkopplad nu
2012-11-13, 10:13   #7

hamre

Medlem

Plats: Uppsala

Registrerad: apr 2003

Detta står på php.net om exec.

If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

Så php väntar på att ditt program ska sluta köra. Så om du vill att programmet fortfarande ska köra så testa med att lägga till /B efter start
hamre är inte uppkopplad
2012-11-13, 10:24   #8

HerrNilsson

Medlem

HerrNilssons avatar

Plats: Skåne

Registrerad: sep 2006

Citat:
Ursprungligen inskrivet av hamre Visa inlägg
Detta står på php.net om exec.

If a program is started with this function, in order for it to continue running in the background, the output of the program must be redirected to a file or another output stream. Failing to do so will cause PHP to hang until the execution of the program ends.

Så php väntar på att ditt program ska sluta köra. Så om du vill att programmet fortfarande ska köra så testa med att lägga till /B efter start
Tack för svar. Men då går det tillbaka till precis som om man inte använder start. Dvs httpd tar massor med CPU och precis som samma problem som innan.
__________________
Bärbar: MacBook Pro, 16GB, 128GB SSD (dualboot Windows 7).
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413, 4st WD RED 3TB.
Stationär: ASUS P6T Deluxe v2, 18GB, i7 930, Radeon HD 5870, 180GB SSD, Win 8.1
HTPC: Intel NUC, 8GB, 120GB SSD.
HerrNilsson är uppkopplad nu
2012-11-13, 10:42   #9

hamre

Medlem

Plats: Uppsala

Registrerad: apr 2003

Okej. Kan vara så att exec inte klarar av bakgrundsprocesser i windows. Du får nog titta på andra sätt. Kanske popen?
hamre är inte uppkopplad
2012-11-13, 12:15   #10

HerrNilsson

Medlem

HerrNilssons avatar

Plats: Skåne

Registrerad: sep 2006

Löstes genom att köra pclose(popen("start /B Server.bat", "r"));
__________________
Bärbar: MacBook Pro, 16GB, 128GB SSD (dualboot Windows 7).
Server: DL380 G6, 36GB RAM, ESXi 5.5
NAS: Synology DS413, 4st WD RED 3TB.
Stationär: ASUS P6T Deluxe v2, 18GB, i7 930, Radeon HD 5870, 180GB SSD, Win 8.1
HTPC: Intel NUC, 8GB, 120GB SSD.
HerrNilsson är uppkopplad nu
Senaste nyheterna

Redaktionens senaste nyhetsrubriker

Sök jobb