Führen Sie eine ffmpeg-Prozess im hintergrund
Ich bin zu wollen, verwenden Sie ffmpeg zum konvertieren von video .flv in php. Derzeit habe ich diese zu arbeiten, aber es hängt der browser, bis die Datei hochgeladen wird und fertig ist. Ich schaue mir die php-docs zum ausführen einer exec () - Vorgang im hintergrund, während der Aktualisierung den Prozess mit der PID zurückgegeben. Hier ist was ich gefunden habe:
//Run linux command in background and return the PID created by the OS
function run_in_background($Command, $Priority = 0)
{
if($Priority)
$PID = shell_exec("nohup nice -n $Priority $Command > /dev/null & echo $!");
else
$PID = shell_exec("nohup $Command > /dev/null & echo $!");
return($PID);
}
Es ist auch ein trick, die ich benutze, um zu verfolgen, ob der hintergrund-task ausgeführt wird, mithilfe der zurückgegebenen PID :
//Verifies if a process is running in linux
function is_process_running($PID)
{
exec("ps $PID", $ProcessState);
return(count($ProcessState) >= 2);
}
Bin, nehme ich an, erstellen Sie eine separate .php-Datei, die läuft dann aus dem php-cli ausführen einer dieser Funktionen? Ich brauche nur einen kleinen Schubs in immer diese Arbeit und dann kann ich es von dort nehmen.
Dank!
InformationsquelleAutor Nic Hubbard | 2009-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist wahrscheinlich die Art, wie ich es tun würde :
Hier ein paar andere Gedanken :
Ihre "Verarbeitung Skript" müsste starten alle paar Minuten ; Sie können cron für, dass, wenn Sie auf einem Linux-ähnlichen Maschine.
Edit : ein bisschen mehr Infos, nachdem ich den Kommentar
Als die Verarbeitung Teil ist aus CLI und nicht vom Apache, brauchen Sie nicht anykind "hintergrund" Manipulationen : Sie können einfach verwenden Sie
shell_exec
, wird wieder die gesamte Ausgabe des Befehls PHP-Skript wenn es fertig ist, es zu tun job.Für den Benutzer gerade die web-page sagt "in Bearbeitung", wird es scheinen, wie die Verarbeitung im hintergrund ; und, in einer Art und Weise, es wird, wie die Verarbeitung erfolgt durch ein weiteres processus (vielleicht sogar auf einem anderen Rechner).
Aber für Sie, werde es viel einfacher sein :
Ihre Verarbeitung Skript Aussehen könnte etwas wie diesen, nehme ich an :
Wirklich einfacher, als das, was Sie zuerst dachte, ist es nicht ? 😉
Einfach keine Gedanken über die hintergrund Sachen nicht mehr : die einzige Sache, die wichtig ist, dass die Verarbeitung Skript gestartet wird regelmäßig von crontab.
Hoffe, das hilft 🙂
InformationsquelleAutor Pascal MARTIN
Brauchen Sie nicht zu schreiben, ein separates php-Skript, um dies zu tun (Obwohl möchten Sie vielleicht, um später, wenn Sie implementieren eine Art von queuing-system).
Du bist fast da. Das problem ist nur, das shell_exec () - Aufruf blockiert, zu warten, für die Rückkehr der Schale. Sie können dies vermeiden, wenn Sie umleiten Ausgabe von dem Befehl in der shell zu welken eine Datei oder /dev/null und hintergrund die Aufgabe (mit & - operator).
So würde der code geworden:
Ich glaube nicht, dass es eine Möglichkeit zum abrufen der PID, leider.
InformationsquelleAutor Brenton Alker