我想編寫一個調用某些代碼但在調用它之後繼續運行的腳本。 E.g調用一個腳本並繼續在PHP的後臺運行它?
function foo()
{
$this->load_function_a();
$this->load_function_b();
echo 'A and B succesfully called';
}
我希望函數的輸出被立即顯示,而不是等待兩者的功能處理完成。任何想法如何在PHP中實現這一點?
我想編寫一個調用某些代碼但在調用它之後繼續運行的腳本。 E.g調用一個腳本並繼續在PHP的後臺運行它?
function foo()
{
$this->load_function_a();
$this->load_function_b();
echo 'A and B succesfully called';
}
我希望函數的輸出被立即顯示,而不是等待兩者的功能處理完成。任何想法如何在PHP中實現這一點?
如果您不希望稍後顯示該函數的輸出,則這是可能的。
<?php
ignore_user_abort(true);
header("Content-Length: 0");
flush();
do_your_work_here();
而不是使用Content-Length: 0
你也可以打印你的真實內容的長度和輸出的東西。然後瀏覽器會看到它讀取所有內容(至少他假設)並且腳本將繼續運行。
你在找什麼,是異步函數調用。雖然您需要在服務器上安裝PThreads擴展,但PHP支持多線程。我不是很familliar與PHP多線程編程(更多的.NET傢伙在這種情況下:P),但這個鏈接可以幫助你不少:
這通常是不容易PHP可以在Web環境中運行。有可能是實現這一點的各種「哈克」的方法,但他們將是不可靠的,如調用函數的析構函數,或者使用register_shutdown_function()
在現實中,簡單的答案是:
function foo()
{
$this->load_function_a();
echo 'A succesfully called';
$this->load_function_b();
}
不過我假設這不會滿足你真實代碼的需求。所以要正確地解決這個問題,真正的答案是使用某種隊列和隊列處理器。例如:
希望這有助於!
嗚......我不認爲這是可能的......也許你可以使用JavaScript和AJAX。 – Goudgeld1 2015-02-07 13:23:21
[如何在提交表單後在後臺運行PHP腳本?](http://stackoverflow.com/questions/4626860/how-can-i-run-a-php-script-in - 提交表單後的背景) – halfer 2015-02-07 13:23:59
除了提供的選項之外,還應考慮作業隊列 - Gearman或Resque。 – halfer 2015-02-07 13:26:38