我試圖在用戶觸發的運行時停止執行 php 腳本。
我計劃的方法是對服務器進行 ajax 呼叫,設定一個會話變數,然后由第一個已經運行的腳本不時查找該變數,以確定行程是否應該停止或繼續運行。希望這是有道理的:)
我已經找到了一些人在這里做同樣的事情或用檔案而不是在這里做會話的例子。
現在我的問題是我想將會話用于我的方法,而不是使用臨時檔案的解決方案,并且提到的會話方法在 Laravel 9 中似乎對我不起作用。
我正在尋找的結果:
- 啟動第一個 php 腳本(可能運行 30 秒)
- 對服務器進行ajax呼叫并設定會話變數
stop_execution = true - 仍在運行的第一個 php 腳本檢測到更改
stop_execution === true并停止執行。
我得到的行為:
- 啟動第一個 php 腳本(可能運行 30 秒)
- 對服務器進行ajax呼叫并設定會話變數
stop_execution = true - 仍在運行的第一個 php 腳本不會檢測
stop_execution === true到&運行中的變化,直到它自己完成。 - 下次我再次運行第一個 php 腳本時,它會立即檢測到更改
stop_execution === true并停止執行。
我對為什么會發生這種情況的想法是會話變數在第一次檢查后沒有在第一個腳本中重繪 。也許有一種方法可以在第一個腳本運行時強制從會話變數中提取所有新更改?有人對 Laravel 有同樣的問題嗎?在不使用 Laravel 時,這似乎正在使用會話變數。我認為這與 Laravel 以及會話的處理方式有關。
我會很感激任何建議??非常
感謝!
代碼:
在開始時執行的第一個腳本
private function longRunningFunction()
{
// check session variable every iteration and exit while loop if === true
while ($condition === true && ! session('cancel_computation')) {
// do stuff ...
}
// reset session variable to false after finishing
session(['cancel_computation' => false]);
return $result;
}
在 ajax 呼叫上執行的第二個腳本
public function cancelComputationFunction()
{
// set session variable to be true
session(['cancel_computation' => true]);
}
uj5u.com熱心網友回復:
我不建議您為此使用會話。
它們在腳本啟動時初始化,我從未見過有人在同一個腳本中重新獲取它們。在線研究時,我也找不到這樣的功能。
但是,您可以做的是利用 Cache 外觀。
它非常適合你想要的東西,而且無論你選擇在 Laravel 的引擎蓋下使用哪個驅動程式,它都非常輕巧。
所以而不是:
public function cancelComputationFunction()
{
// set session variable to be true
session(['cancel_computation' => true]);
}
你可以這樣做:
public function cancelComputationFunction()
{
// set cache variable to be true
Cache::put('cancel_computation_' . session()->getId(), true);
}
同樣在腳本的長期運行部分中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/527734.html
上一篇:更新購物車中的會話變數
