2012-01-18 272 views

回答

16

取決於您使用的操作系統。

對於Linux:

pclose(popen("php somefile.php &","r")); 

通知amperstand末(非常重要)。

對於Windows:

pclose(popen("start php.exe somefile.php","r")); 

這裏的start關鍵字是非常重要的。

希望這會有所幫助。

+1

我試過'exec(「php video_processor.php &");'和延遲是一樣的,那麼如果我在video_processor.php中設置了'sleep(10)',那麼我的父腳本也會等待10秒 – adrianTNT 2012-01-18 13:00:46

+0

用'pclose (popen(「php video_processor.php」,「r」));''或'pclose(popen(「/ usr/bin/php video_processor.php&」,「r」));'(我假設你的PHP是安裝在默認位置) – 2012-01-18 13:03:05

+0

它與這一個工作:'pclose(popen(「php video_processor.php&」,「r」));'然後我編輯我的工作:'pclose(popen(「ffmpeg - i'videos/sample.mp4'-qmax 1 -vframes 1 -ss 80 videos/images/1.jpg&「,」r「));'Thank you。:party::) – adrianTNT 2012-01-18 13:10:40

1

那麼使用一個Ajax請求激活EXEC部分...然後與其他任務繼續

+0

它可能會工作,但應該有一種更簡單,更可靠的方式,就像在EXEC結束的參數()或系統( ); – adrianTNT 2012-01-18 12:42:17

+0

我沒有得到-1級。蓋伊回答簡短。也許不喜歡,但仍然是一個公平的。 – hummingBird 2012-01-18 12:44:02

+0

我沒有給-1 – adrianTNT 2012-01-18 12:48:07

1

這應該工作:

shell_exec("nohup yourcommand > /dev/null 2> /dev/null &"); 

編輯:對不起,不知道爲什麼我排除& 2>將STDOUT和STDERR重定向到/ dev/null。

+0

命令運行,但延遲存在,這是完整的命令:'shell_exec(「ffmpeg -i'videos/sample.mp4'-qmax 1 -vframes 1 -ss 80 videos/images/1.jpg 2>/dev/null「);' – adrianTNT 2012-01-18 12:33:06

+0

try:shell_exec(」nohup ffmpeg -i'videos/sample.mp4'-qmax 1 -vframes 1 -ss 80 videos/images/1.jpg>/dev/null 2>/dev/null「 ) – 2012-01-18 12:35:57

+0

延遲相同,命令執行正常。也許ffmpeg的行爲不同? – adrianTNT 2012-01-18 12:41:23

4

這並不直接回答你的問題,但你應該考慮在後臺進程中使用cron作業或使用諸如Beanstalkd之類的隊列來完成視頻轉換工作。

這樣你就可以在後臺堆疊你的ffmpeg工作而不會阻塞你的網絡服務器。

我在過去的兩種方法(cron/queue)方面都取得了很大的成功。

有關後臺進程的一些其他職位:

php execute a background process

Run a ffmpeg process in the background

Using ffmpeg, PHP and beanstalk

一些工具可能對您有用:

http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

PEAR System_Daemon

Pheanstalk, a Beanstalkd library for PHP

1

我做什麼:

public function post_create() 
{ 
    ob_end_clean(); 
    header("Connection: close"); 
    ignore_user_abort(); // optional 
    ob_start(); 
    echo "Tell ajax to gtfo!"; 

    $size = ob_get_length(); 
    header("Content-Length: $size"); 
    ob_end_flush(); // Strange behaviour, will not work 
    flush();   // Unless both are called ! 
    // Do processing here 
} 
相關問題