簡體   English   中英

在PHP中執行exec()或system(),不要等待輸出

[英]Executing an exec() or system() in PHP and do not wait for output

我想從PHP腳本中觸發eider exec()或system()中的shell命令,但這是一個需要一段時間才能完成的任務,有沒有辦法觸發它並繼續運行PHP頁面加載而沒有延遲?

編輯:我在CentOS 6,PHP 5.3上

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

對於linux:

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

注意最后的放大器(非常重要)。

對於Windows:

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

這里start關鍵字很重要。

希望這可以幫助。

這不能直接回答您的問題,但您應該考慮使用cron作業或使用Beanstalkd等隊列在后台進程中進行視頻轉換。

這樣,您可以在后台堆疊ffmpeg工作,而不會阻止您的Web服務器。

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

關於后台流程的其他一些帖子:

php執行后台進程

在后台運行ffmpeg進程

使用ffmpeg,PHP和beanstalk

您可能會發現一些有用的工具:

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

PEAR System_Daemon

Pheanstalk,一個用於PHP的Beanstalkd庫

我所做的:

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
}

好吧,使用ajax請求激活exec部分......然后繼續執行其他任務

這應該工作:

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

編輯:對不起,不知道我為什么要排除&把它放到bg 2>將STDOUT和STDERR重定向到/ dev / null。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM