2015-02-24 53 views
0

我正在PHP CLI應用程序中,我需要關鍵事件聽衆PHP CLI的關鍵事件偵聽器功能

讓我們說這是我的代碼 任務做

for($i=0;$i<=n;$i++){ 
    $message->send($user[$i]); 
} 

一旦我我完成發送郵件,我將不得不保持連接活着與下面的代碼接收送達收據。

我用$command = fopen ("php://stdin","r");來接收用戶命令。

while(true){ 
    $connection->refresh(); 
} 

在任何活動期間連接都會自動保持活動狀態,但在閒置時我必須保持循環運行。

如何在按下任何可以使此事件中斷並執行某些功能的按鍵上運行事件?

+0

你可能真的想看看一些隊列軟件。嘗試使用本地化的PHP進行守護進程並不會有任何樂趣。 – castis 2015-02-24 17:54:44

回答

1

PHP沒有開發,來處理這類問題。魔術字將是Thread

我可以想象,最乾淨的方式是看看分機PThreads。有了它,你可以做線程像其他語言:

class AsyncOperation extends Thread { 
    public function __construct($arg){ 
    $this->arg = $arg; 
    } 

    public function run(){ 
    if($this->arg){ 
     printf("Hello %s\n", $this->arg); 
    } 
    } 
} 
$thread = new AsyncOperation("World"); 
if($thread->start()) 
    $thread->join(); 

另一種方式是通過在不同的腳本中的隊列做任務。有一些隊列服務器在那裏,但它可以簡單地通過PHP.exe調用shell_execute您的隊列腳本。在Linux上,您需要諸如...script.php > /dev/null 2>/dev/null &,Windows start /B php...之類的東西來停止等待腳本完成。