2015-02-07 69 views
1

我想編寫一個調用某些代碼但在調用它之後繼續運行的腳本。 E.g調用一個腳本並繼續在PHP的後臺運行它?

function foo() 
{ 
$this->load_function_a(); 
$this->load_function_b(); 
echo 'A and B succesfully called'; 
} 

我希望函數的輸出被立即顯示,而不是等待兩者的功能處理完成。任何想法如何在PHP中實現這一點?

+0

嗚......我不認爲這是可能的......也許你可以使用JavaScript和AJAX。 – Goudgeld1 2015-02-07 13:23:21

+0

[如何在提交表單後在後臺運行PHP腳本?](http://stackoverflow.com/questions/4626860/how-can-i-run-a-php-script-in - 提交表單後的背景) – halfer 2015-02-07 13:23:59

+0

除了提供的選項之外,還應考慮作業隊列 - Gearman或Resque。 – halfer 2015-02-07 13:26:38

回答

0

如果您不希望稍後顯示該函數的輸出,則這是可能的。

<?php 
ignore_user_abort(true); 
header("Content-Length: 0"); 
flush(); 
do_your_work_here(); 

而不是使用Content-Length: 0你也可以打印你的真實內容的長度和輸出的東西。然後瀏覽器會看到它讀取所有內容(至少他假設)並且腳本將繼續運行。

+0

注意這仍然受最大執行時間的限制。 – 2015-02-07 13:44:09

+0

@kelunik:是的,我不在乎輸出,所以在我打電話給我的功能之前我需要調用它嗎? – SanketR 2015-02-07 14:01:21

+0

@SanketR:對,這就是我用'do_your_work_here'指出的。請注意,這樣的事情可以很容易地用於爲您的網絡服務器創建大量的負載。 – kelunik 2015-02-07 14:17:18

0

你在找什麼,是異步函數調用。雖然您需要在服務器上安裝PThreads擴展,但PHP支持多線程。我不是很familliar與PHP多線程編程(更多的.NET傢伙在這種情況下:P),但這個鏈接可以幫助你不少:

PThreads

0

這通常是不容易PHP可以在Web環境中運行。有可能是實現這一點的各種「哈克」的方法,但他們將是不可靠的,如調用函數的析構函數,或者使用register_shutdown_function()

在現實中,簡單的答案是:

function foo() 
{ 
$this->load_function_a(); 
echo 'A succesfully called'; 
$this->load_function_b(); 
} 

不過我假設這不會滿足你真實代碼的需求。所以要正確地解決這個問題,真正的答案是使用某種隊列和隊列處理器。例如:

  • 具有函數B隊列它的功能,然後由cron作業稍後處理。
  • 使用這樣的RabbitMQ或Gearman來異步處理函數B的功能。

希望這有助於!

相關問題