J'essaie d'exécuter une commande en arrière-plan en utilisant PHP afin que l'application web puisse continuer à charger, mais n'ayant pas de chance jusqu'à présent.Exécuter une commande shell en arrière-plan en utilisant PHP
La commande est pour une application de streaming en direct, donc comprend les éléments suivants:
<stream pre-process> | ffmpeg <options> | <stream segmenter>
je peux coller ci-dessus dans un script et l'exécuter bien en arrière-plan bash avec &, mais cela ne travailler en PHP. J'ai également essayé d'utiliser nohup avant, et "nohup & echo $!", Mais pas de chance.
Je redirige aussi tous les fichiers stderr vers/dev/null, et je peux vérifier dans les journaux apache qu'il n'y a pas de sortie générée lorsque j'exécute la commande (mais elle est en cours d'exécution).
Un exemple de code ci-dessous .. ce que j'ai après ce code ne s'exécute pas jusqu'à ce que cela se termine, ce qui est une longue période.
function streamVid ($mid, $width, $height, $br) {
$cdir = "./temp";
$zmstrm = "zmstreamer -m ".$mid." 2> /dev/null";
$seg = "segmenter - 3 ".$cdir."/sample_".$mid." ".$cdir."/stream_".$mid.".m3u8 ./ 2>/dev/null";
$ffparms = "-f mpegts -analyzeduration 0 -acodec copy -s ".$width."x".$height." -vcodec libx264 -b ".$br." -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate ".$br." -bufsize ".$br." -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 320:240 -g 30 -analyzeduration 0 -async 2 - 2> /dev/null";
$url = $zmstrm . " | ffmpeg -t 10 -analyzeduration 0 -i - ". $ffparms . " | " . $seg;
shell_exec("nohup ". $url." & echo $!");
ob_flush();
flush();
}
Merci Zack. L'intention n'est pas de bloquer cela, et j'imagine que j'essaie d'implémenter la fonctionnalité «démon» en ligne, mais ce n'est peut-être pas possible. Mais pour clarifier, je ne veux pas diffuser le résultat de cette opération; Cette chaîne de commande crée des fichiers sur le disque auxquels accède un élément HTML-5 (que le programme PHP va créer). Je vais jeter un coup d'œil à une approche démon, mais espérais quelque chose de plus simple pour faciliter le déploiement sur le terrain. –