ugrás a tartalomhoz

.bat file futtatása .php-n keresztül

crysis · 2008. Május. 11. (V), 21.18
Sziasztok!

Lenne egy olyan kérdésem, hogy hogyan lehet futtatni (.bat) filet php-n keresztül. ( Ha lehetséges-e ilyen ). Webes felületet készítek, amin lehet állítani a játék szervereket és (.bat)-file futtatja a szervert.

Kerestem már google-n ilyet de több, kevesebb sikerrel jártam.

Lényegében arra lennék kíváncsi, hogy lehet-e futtatni (.bat) filet php-n keresztül, úgy hogy Win32-ben elindítja azt egy külön ablakna! Ha van ilyen, akkor hol találok ilyet?

Köszönöm előrre is!

Üdv, CryS!S
 
1

exec

Drawain · 2008. Május. 11. (V), 22.32
Erre szolgál az exec. Kövesd a leírtakat, ellenőrizd a jogosultságokat ill. hogy nincs e safe módban a szerver.
2

__

crysis · 2008. Május. 11. (V), 22.50
Köszönöm!

Megnézem!
3

Folyamatos betöltés :S

crysis · 2008. Május. 12. (H), 00.06
Szia!

A dolog működik, leis futtatja amit kértem! Csak az a gond vele, hogy amikor lehívom a php scriptet, akkor folyamatos betöltésbe kezd és már rég fut a kért program. Ez miért van?
4

várakozik

bandi · 2008. Május. 12. (H), 16.11
Valószínűleg azért, mert azt várja a szerver, hogy mikor fejeződik be a .bat fájl futása. Próbálkozz úgy elkészíteni a programod, hogy a háttérben fusson.
5

..

crysis · 2008. Május. 13. (K), 15.10
Sziasztok!

Ez az exec(); néha fut és néha nem. Tehát pontosan azt szeretném, hogy ha oldalon azt mondom neki, hogy álljon meg akkor az a program "leáll", vagyis bezárul és ha azt mondom neki induljon, akkor induljon el. Nos a script meg minden megvan leis kezeli, csak itt akadtam el hogy nem indítja és állítja meg a programot!

Eddig az elindító dologgal így próbálkozom :

<?php
exec("C:\AppServ\webserver\www\new\servers\jkja\1656707\_1656707_start.bat");

// Nos indíthatnám így is, de  a BAT file megoldása szerintem jobb :)

exec("C:\AppServ\webserver\www\new\servers\jkja\1656707\jampDed.exe +set dedicated 2 +set fs_game japlus +set net_port 24574 +set com_hunkmegs 64 +set sv_maxclients 24 +exec server.cfg");
?>
Gondolom nagyjából értitek, hogy egy játék szervert akarok így elindítani. Nos ez a prog néha lefut SYSTEM felhaszn. néven, de különösöbben csak CTRL+ALT+DEL-el tudom kezelni azt hogy zárja is be magát.

Azt hogy lehet megcsinálni, hogy ha megnyomom a php-prog. ba a start gomot, akkor elindul és utánna a stop gombot, akkor meg a bat file bezárul.

A bat file tartalma :

.\jampDed +set dedicated 2 +set fs_game japlus +set net_port 24574 +set com_hunkmegs 64 +set sv_maxclients 24 +exec server.cfg

echo "------------------------------" >> auto_restart.txt
date /t >> auto_restart.txt
time /t >> auto_restart.txt

.\_1656707_start.bat
Ez elindítja a jampDed.exe-t és maga a szervert.

Meg ez a bat file beakad szal állandó futásba indul és a weblapon még tölt valamit, de ha bezárom a bat filet, akkor gyors. lefut.

Szerintem úgy lehetne ezt beállítani, mivel a bat file-re csak addig van szükség, amíg beindítja a jampDed.exe-t, hogy bezárja. Csak nem tudom hogy kéne megoldani! :S

( Köszönöm, hogy végig olvastad hosszú "regényem", remélem tudsz nekem segíteni :) )

Üdv : CryS!S
6

Ütemező

zila · 2008. Május. 13. (K), 15.40
Csináld azt, hogy a php-d elhelyez valahová egy file-t (pl: c:/tmp/start_game.server) amikor indítani akarod a szervered, és egy másikat (pl. c:/tmp/stop_game.server) ha le akarod állítani. Ezek után egy olyan batch file-t kell csinálj, amelyik lefut mondjuk percenként (a windows feladat ütemezőjéből) és nézi, hogy létezik-e a c:/tmp/start_game.server file? ha igen akkor elindítja a szervert, és letörli a c:/tmp/start_game.server-t, ha létezik stop_game.server akkor leállítja a szervert és letörli a stop_game.server file-t.

De ez a téma már volt itt a weblaboron, csak a keresőt nem használod...
http://weblabor.hu/forumok/temak/18583
7

Hell.

crysis · 2008. Május. 13. (K), 15.54
Szia!

A keresőt használom, csak nem vagyok valami jó keresgélő. ( Nincs türelmem :S ) Jónak tartom az ötletedet, de mivan akkor ha a szervert úgy állítom le hogy CTRL/ALT/DEL, akkor a start_.. megmarad. Bár meglehet oldani sztem hogy ne lehessen bezárni, vagy nem zárom be csak úgy.

Köszönöm megnézem!
8

fapad

zila · 2008. Május. 13. (K), 16.27
Ez a megoldás nyilván fapados. Vizsgálni kell, hogy fut-e már a szerver, ha igen akkor csak simán törlöd a flag file-t, így meg tudod akadályozni, hogy percenként induljon egy szervered, amíg ott a file, vagy a szerver indítása előtt törlöd a file-t, így nem gond, ha a batch file még fut (mert abból indult a szerver és amíg fut nem törli a flag-et). Windows-on nem ismerem a lehetőségeket, linuxon csinálhatsz kis message queue-t amivel vezérled a szereveredet, vagy shared memory-n keresztül ipc-zel. A szereveredet a batch file-ból indíthatod háttérprocesszként stb. Ezeket windows-on is meg lehet oldani (gondolom), de sajnos fogalmam sincsen hogyan, nem használok ilyen célra windows-t.
9

winserv.

crysis · 2008. Május. 13. (K), 16.32
Szia!

Én ezt még teszt ként fogom csinálni. de vagy linux-on lesz a cucc, vagy win serv-en, de szerintem linux-on az ingyenessége miatt.

Már sikerült megoldanom beindítani úgy a bat filet, hogy ha elindította a X.exe-t akkor zárja be magát auto. Nos az elindítás megy, de hogy zárok be egy adott futó .exe alkalmazást?


( RE : Megoldottam, hogy kell megcsálni! Pl .: tskill explorer :D:D )

Köszi mindent by all
10

Kill

zila · 2008. Május. 13. (K), 16.43
http://www.tech-recipes.com/rx/446/xp_kill_windows_process_command_line_taskkill
11

Re

crysis · 2008. Május. 13. (K), 17.05
Szia!

Még egy ucsi kérdésem van ehez a dologhoz és minden remekül működik :D Szal letöltöm a progot :
<?php
system("_1656707_start.bat");
echo "<B>_1656707_start.bat started.</B>";
?>
Elindul !! csak a startedet akkor írja ha leállítom a programot. vagy a CTRL/ALT/DEL-el. Szal addig töltölődik az oldal, amíg a porg fut. Hogy lehet megakadályozni hogy ha elindult a program akkor ne töltsön folyamatosan, hanem szépen betöltölődik elindul a prog és abbahagyja a betöltést. Van erre valami mód?

Kösz előrre is !

üdv: crysis
12

exec

janoszen · 2008. Május. 13. (K), 23.41
El kellene olvasni a system és az exec doksiját illetve a Google is sokat segít. Akármilyen hihetetlen, de csomó hasznos információt már leírtak ott. Egyébként eredetileg nem akartam beleszólni ebbe a topicba, mivel már egy nem rég felmerült topicban leírtam: NEM akarsz Apache / PHP alól gameszervert indítani. Nem jó az Neked, hogy ha lerohad a webszerver, akkor mennek vele a játékszerverek is, a többi egyéb komplikációjáról nem is beszélve. De ha rám hallgatsz, azt csinálsz, amit akarsz. :)

Na jó, elmondom a tutit: Windows alatt a "start" parancs a barátod, azt be lehet configolni hogy azonnal térjen vissza, ne várja meg a program futását.
13

_

crysis · 2008. Május. 14. (Sze), 16.20
Sziasztok!

A megoldást megtaláltam! Aki netán ugyanezzel a témával küzködne íme a megoldás :

<?php
function callTool ($path,$file) {
    chdir($path); $call = $path.$file;
    pclose(popen('start /b '.$call.'', 'r'));
}

$location = "c:\teszt";
$filename = "\program.exe";
callTool($location,$filename);

?>
Köszönök mindent!

Üdv: CryS!S