Hur starta program i bakgrunden med PHP?

Permalänk

Hur starta program i bakgrunden med PHP?

Det jag skulle vilja göra är att via php starta ett program i bakgrunden på min server.
Jag har provat med shell_exec() och system() men dessa väntar på att programmet ska köras klart innan skriptet går vidare och det vill jag undvika då det tar en stund innan programmet kört klart. Programmet jag vill använda är play för att spela upp en wav-fil.

Bör kanske nämna att servern kör linux.

Permalänk
Korsordsguru

Det kanske funkar om du kör igång "play" i bakgrunden helt enkelt?

shell_exec('play <parametrar> &');

Eller gör ett shellscript som kör igång play i bakgrunden och shellscriptet är det du anropar från shell_exec();

Visa signatur
Permalänk

Jag har redan testat båda dom lösningarna och i båda fallen så väntar scriptet tills play har spelat färdigt innan det går vidare.

Permalänk
Medlem

Om man läser kommentarerna på http://se.php.net/exec så hittar man bland annat.

function fork($shellCmd) { exec("nice $shellCmd > /dev/null 2>&1 &"); }

Har inte testat men det finns en hel del olika lösningar bland kommentarerna.

Visa signatur

Stolt användare av en ibook 300 MHz (dasslocket)

Permalänk
Medlem

Kan fungera med

exec("screen -m -d play lindztr.wav")

Det gör att play körs i egen display, men förresten så kanske inte det går heller du.. Du får testa.. Men jag tror att

function fork($shellCmd) { exec("nice $shellCmd > /dev/null 2>&1 &"); }

borde vara mer funktionsduglig än att använda screen..

Visa signatur

Hemsida: Alley.se

Permalänk

Tack så mycket för hjälpen. Det zypher_X och lindZtr föreslog fungerade alldeles utmärkt.

Permalänk
Medlem

Är intresserad av att göra en liknande grej. Men jag får det inte att fungera. Vad ska variabeln $shellCmd hålla för något :S ?

Permalänk
Medlem

$shellCmd är en sträng med det du vill köra i shellet. T.ex:

fork ("service httpd restart"); fork ("play lindztr.wav");

Visa signatur

Stolt användare av en ibook 300 MHz (dasslocket)

Permalänk
Medlem

Aha...okej. Bra, men borde då inte detta fungera?

-------------------------------------------------
fork (notepad.exe);

function fork($shellCmd) {
exec("$shellCmd > /dev/null 2>&1 &");
}
-------------------------------------------------

eftersom exec("notepad.exe"); fungerar

edit:
/dev/null är vad jag förstår ett sätt att omdirigera outputen till någon sorts skräp output. Men jag har ingen koll på vad 2>&1 & betyder och egentligen inte heller det först nämnda. Var kan jag läsa om sådana "tillägg" till exec? Har testat googla men det är svårt att hitta något vettigt!