簡體   English   中英

PHP頁面執行后台進程

[英]PHP page to execute a background process

我有一個PHP腳本,可從第三方來源提取用戶特定的數據並將其轉儲到本地表中,我想在用戶登錄時每隔X分鍾執行一次,但是運行大約需要30秒,我不這樣做不想讓用戶體驗。 我認為最好的方法是為每個成功的請求添加時間戳,然后在每個頁腳中放置一些代碼,以檢查上一次請求,如果超過X分鍾前,則在后台執行PHP腳本。

我不想使用cron作業來執行此操作,因為執行pull腳本時需要特定於用戶的全局變量和會話變量。

我可以看到popen()允許我運行PHP腳本,但是我似乎找不到任何有關是否以訪問者身份在其會話中運行的信息(因此可以訪問用戶特定的全局變量或會話變量)或作為一個單獨的會話。

  1. popen()是否可以解決我的問題?
  2. 我要采用正確的方法還是在用戶登錄時間隔執行腳本的更好方法?

一如既往,任何幫助或建議都將不勝感激!

干杯

安迪

也許可以將會話數據也放在表中。 這樣,您可以輕松地從后台進程訪問它。 您只需傳遞session_id()user id作為參數,以便進程知道當前正在處理的用戶。

  1. 不,因為PHP仍然需要等待popen()啟動的進程才能退出
  2. 可能不是,因為該解決方案不適合系統的體系結構約束

您不使用Cron作業的理由實際上並不合理。 您可能已經放棄了太快地探索該特定路徑,而試圖將一個方形的釘子插入一個圓孔中而陷入一個角落。

您遇到的真正問題是弄清楚如何在Web請求和從crontab運行的PHP之間進行進程間通信。 這可以通過多種方式解決,然后可以輕松地克服PHP的體系結構約束。

例如,您可以將會話ID存儲在數據庫或其他存儲中,並獨立於Web請求從crontab中運行的PHP腳本訪問會話文件。

假設您是根據用戶對服務器的上一次請求確定登錄的,方法是將該信息作為時間戳存儲在某個數據存儲中,並將當前會話ID存儲在user表中。

cron作業可以每隔X分鍾啟動一次,查看數據庫或持久性存儲中是否有給定范圍內具有活動時間戳記的所有記錄,提取這些會話ID並執行所需的操作。

現在,如果處理時間超過30秒,您如何真正有效地進行擴展的問題也可以獨立解決。 有關如何處理來自PHP的分布式作業管理器/隊列的更多詳細信息,請參見此答案

我將使用Javascript和AJAX請求從前端調用腳本並處理結果。 然后,您可以在JavaScript中設置時間間隔,並在每個時間間隔滴答時發送AJAX請求。

AJAX是您所需要的: http : //api.jquery.com/jquery.ajax/

在那30秒之后,使用方法“成功”執行某項操作。

暫無
暫無

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

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