bokningssystem - köra bat filer via php

Permalänk
Medlem

bokningssystem - köra bat filer via php

Hejsan gott folk!

håller på med ett projekt i skolan, och försöker göra ett bokningssystem.
Själva kontrollpanelen är i princip klar, men nu försöker jag göra så att man kan starta, stoppa och restarta servern genom ett knapptryck på sidan.
Har prövat System(); Exec(); utan någon framgång alls, vet inte riktigt hur jag ska gå tillväga.

Har ni några förslag?

Permalänk

Har själv aldrig testat att göra något sådant, men för att kunna exekvera en ex. shutdown så måste väl användaren som kommer åt gränssnittet ha lite behörigheter?

Permalänk
Medlem

system("cmd /c <bat-fil-här>");

Annars borde exec fungera likvärdigt. Du kanske måste skriva hela sökvägen till CMD i värsta fall:
C:\Windows\System32\cmd.exe

Om windows ligger på C:.

EDIT:

Det förutsätter givetvis att användaren som PHP körs som har rättigheter att starta om webbservern, och givetvis även ha tillgång till bat-filen.

/c är bättre.
Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem

Har prövat det där också, men det känns som att användaren inte har rättigheter.

Har en server med windows 2008 på, kör fileserver där och när jag försöker köra start knappen i kontrollpanelen så startar den cmd.exe med användaren IUSR, hur ska jag göra för att få den att köra som en annan användare?

Permalänk
Medlem

Nu var det ett tag sedan jag pillade med IIS men under inställningar för din site så kan du välja vilken användare du ska köra den som. Dessutom borde du se i eventloggen (händelsehanteraren på svenska?) att dina exekveringar är nekade.

//C

Permalänk
Medlem

Har prövat det du sagt, utan någon framgång alls.

koden som ligger på servern

<?php $output = ""; $action = $_POST['action']; if ($action == "1001") { exec("C:\Windows\System32\cmd.exe /c C:/HLServer/ns2/start.bat", $output); print_r($output); } else if ($action == "1002") { echo "1"; } else if ($action == "1003") { echo "1"; } else if ($action == "1004") { echo "1"; } else { echo "0"; } ?>

koden som ska ta emot knapptrycken

<?php $array = array("start", "reboot", "shutdown", "reinstall"); //$user = $_SESSION['sess_user']; $user = 1; $action = $_POST['action']; $i = 0; foreach($array as $arr) { if ($arr == $action) $i++; } if ($i == 0) { exit; } if ($action == 'start') { $result = send($user, 1001); echo $result; if ($result == 1) echo "Server started successfully."; else echo "Server start failed."; } else if($action == 'shutdown') { $result = send($user, 1002); if ($result == 1) echo "Server stopped successfully."; else echo "Server stop failed."; } else if($action == 'reboot') { $result = send($user, 1003); if ($result == 1) echo "Server rebooted successfully."; else echo "Server reboot failed."; } else if($action == 'reinstall') { $result = send($user, 1004); if ($result == 1) echo "Server reinstall was successfull."; else echo "Server reinstall failed."; } function send($user, $action) { $url = "http://www.example.com/receiver.php"; $ch = curl_init(); // initialize curl handle curl_setopt($ch, CURLOPT_URL,$url); // set url to post to curl_setopt($ch, CURLOPT_FAILONERROR, 1); //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);// allow redirects curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable curl_setopt($ch, CURLOPT_TIMEOUT, 5); // times out after 5s curl_setopt($ch, CURLOPT_POST, 1); // set POST method curl_setopt($ch, CURLOPT_POSTFIELDS, "user={$user}&action={$action}"); // add POST fields $result = curl_exec($ch); // run the whole process curl_close($ch); return $result; } ?>

Kanske är något fel där?

Permalänk
Medlem
Skrivet av Zoth:

Har prövat det du sagt, utan någon framgång alls.

koden som ligger på servern

exec("C:\Windows\System32\cmd.exe /c C:/HLServer/ns2/start.bat", $output);

Ja, troligtvis hittar den inte bat-filen. Windows använder sig av \ för att indikera sökvägar till filer.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem

Har prövat det du sa ToJa92, den startar CMD.exe kan man se i aktivitetshanteraren, men ingen HLDS fil kommer upp alls.
Kan man göra något så att CMD startar som administratör eller dylikt?

Permalänk
Medlem
Skrivet av Zoth:

Har prövat det du sa ToJa92, den startar CMD.exe kan man se i aktivitetshanteraren, men ingen HLDS fil kommer upp alls.
Kan man göra något så att CMD startar som administratör eller dylikt?

runas kan du använda för att köra kommandon som andra användare.

Visa signatur

Citera eller nämn gärna mig (@ToJa92) om du svarar på något jag skrivit.
Uppskattar du eller blir hjälpt av ett inlägg jag skrivit är jag tacksam om du gillar det.

Permalänk
Medlem
Skrivet av Zoth:

Har prövat det du sa ToJa92, den startar CMD.exe kan man se i aktivitetshanteraren, men ingen HLDS fil kommer upp alls.
Kan man göra något så att CMD startar som administratör eller dylikt?

Testa att stänga av UAC.

Visa signatur

Datorer - M1 MacBook Pro 14"
Hörlurssystem - Scarlett 4i4 / Objective2 / Beyerdynamic DT 770
Ljudsystem - NAD C356BEE > DALI Mentor 6
Bilpark - Porsche 718 Spyder

Permalänk
Medlem

ToJa92: Det där har jag prövat utan någon framgång alls.

Jilted82: Verkar fungera bättre nu, den startar iaf. Ska klura mer på det där!
Tack för hjälpen just nu..

Återkommer om det är något mer!

Permalänk
Medlem

Nu vet jag inte om du provat det redan, men jag skulle börja med att byta ut "C:\W..." etc. till "C:\\W..." eftersom det ska vara två \ i följd i strängarna om det är ett backslash man vill ha. \t skulle annars ex. ge ett tabb tecken.

Permalänk
Medlem

Varför vill du starta om den? Känns ju mer som ett designfel någonstans.
Är det läsa om någon inställning som är målet egentligen?

Permalänk
Medlem

Försökte exakt samma för typ 7-8år sedan.. lyckades inte få det att fungera.. återkom gärna om du lyckas.
För övrigt tror jag inte att du kan starta på det där sättet, och jag tror du i princip måste schemalägga något som inte körs från php och sedan skicka kommandona till det schemalagda programmet..men jag har gärna fel.

Visa signatur

Citera om du skriver till mig. Annars läser jag troligtvis INTE.

Permalänk
Medlem

På min server funkar det utmärkt att köra CMD-skript via servern. Kommer dock inte ihåg vilken kod jag använder.
Windows 7, Apache med PHP körs som en service med default rättigheter, UAC påslaget.
Du kan testa kolla att SYSTEM-kontot har rättigheter att köra/execute bat-filen i fråga.

Permalänk
Medlem
Skrivet av Megamannens:

Varför vill du starta om den? Känns ju mer som ett designfel någonstans.
Är det läsa om någon inställning som är målet egentligen?

Om man vill starta om servern så måste det ju finnas en sådan funktion?

Skrivet av anden12:

Försökte exakt samma för typ 7-8år sedan.. lyckades inte få det att fungera.. återkom gärna om du lyckas.
För övrigt tror jag inte att du kan starta på det där sättet, och jag tror du i princip måste schemalägga något som inte körs från php och sedan skicka kommandona till det schemalagda programmet..men jag har gärna fel.

Okejokej..
Jo, det kan väl stämma. Men det är ju bara om man ska titta ifall servern är online eller inte.

Skrivet av jetten:

På min server funkar det utmärkt att köra CMD-skript via servern. Kommer dock inte ihåg vilken kod jag använder.
Windows 7, Apache med PHP körs som en service med default rättigheter, UAC påslaget.
Du kan testa kolla att SYSTEM-kontot har rättigheter att köra/execute bat-filen i fråga.

System-kontot har kör/execute rättigheter.

Verkar inte få det hela att fungera, försöker som en tok! ^^

EDIT:
Det jag har prövat.
Har testat olika RUNAS alternativ, utan någon framgång.
Även ändrat UAC till det lägsta.
Men den jäveln vägrar starta HLDS.

Permalänk
Medlem

Kör en linux dist ist, alla vet att PHP applikationer körs bäst i linux.