Permalänk
Medlem

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.

Permalänk
Medlem

Se notes för exec() (http://se1.php.net/manual/en/function.exec.php) samt ta en extra titt på din batch-fil.

Permalänk
Medlem

Server.bat returnerar ju aldrig så därför fortsätter inte ditt PHP-script.

Permalänk
Medlem
Skrivet av iXam:

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?

Permalänk

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");

Permalänk
Medlem
Skrivet av firechild:

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å.

Permalänk
Medlem

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

Permalänk
Medlem
Skrivet av hamre:

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.

Permalänk
Medlem

Okej. Kan vara så att exec inte klarar av bakgrundsprocesser i windows. Du får nog titta på andra sätt. Kanske popen?

Permalänk
Medlem

Löstes genom att köra pclose(popen("start /B Server.bat", "r"));