Autor Zpráva
hunter_dave
Profil
Zdravím,
už přes půl dne se to snažím nějak vyřešit a nevím si rady. Potřebuju nějak přesměrovat výstup při použití funkce exec() ..
$exec = 'start '.$player_url.' "'.$file.'"';
  file_put_contents("files/playmusic.bat", $exec);
  exec(dirname(__FILE__)."/files/playmusic.bat > NULL ");
Tenhle zápis sice funguje, ale php se zasekne dokud se proces neukončí. Zkoušel sem nasměrovat exec na soubor který teprve ten samotný program spustí a sám se ukončí, ale php bohužel pořád čeká na ukončení procesu programu.
Potřeboval bych, aby php prostě odeslalo signal ke spuštění souboru a dál se o to už nezajímalo.
Už sem vážně zoufalý, uvítám každou radu.
hunter_dave
Profil
tak nakonec teda vyreseno .. dost neelegantnim zpusobem .. php spusti VBScript, ktery spusti batch soubor a ten spusti prehravac s hudbou .. ale samozrejme pokud prijdete na lepsi reseni .. rad uvitam :)
Keeehi
Profil
hunter_dave
Řešením je využít paralelního programování - vytvořit více vláken běžící aplikace.

$pid = pcntl_fork();
if ($pid == -1) {
     die('could not fork');
} else if ($pid === 0) {
     // we are the child
    exec("start $player_url \"$file\"");
    exit;
}
// we are the parent



pcntl_wait($status); //Protect against Zombie children
Důležitý je řádek 7. Ten exit tem musí být, jinak by se provádělo to co je za podmínkou 2x (v rodiči i v potomkovi) a i řádek 13, který na konci scriptu zajišťuje, že potomek neskončí dřív než rodič. Pokud ale má rodič skončit dříve než potomek, pak v systému zůstává zombie process.
hunter_dave
Profil
Mám php5 a funkce pcntl_* hlasi neznama funkce .. je potreba je do php doinstalovat nebo nejak povolit?
Majkl578
Profil
PCNTL není dostupné pro platformu Windows. Na Unix platformě vyžaduje kompilaci s přepínačem --enable-pcntl.
hunter_dave
Profil
Tak to bude ten problem :D mám windows ..
Keeehi
Profil
Na linuxu by to mělo jít spustit bez forkování jako proces na pozadí prostým přidáním " &" na konec. Na windows snad start /B program, ale to nemám ozkoušené.
hunter_dave
Profil
To sem zkousel .. nefungovalo .. a taky mám problém právě s tím, že se program spouští na pozadí, nejde s ním pracovat v normálním uživatelském rozhraní .. jde s ním pracovat pouze jako s procesem .. zkousel jsem nastavit službu apache aby se přihlašovala jako právě přihlášený uživatel ale výsledek byl stejný.
Majkl578
Profil
[#7] Keeehi:
Procesy spouštěné pomocí & umírají ve chvíli, kdy zemře proces, který je spustil. Vhodnější by bylo spuštění přes nohup.
hunter_dave
Profil
A není tu někdo kdo by měl řešení pro windows?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: