其實會想用 fsockopen 做非同步幕後執行,主要是因為客戶要開發自動批次下載Google雲端硬碟及自動建立檔案功能,如果用以往的活人撞針方法,觸發執行的那個ip會因為自動執行畫面整個延遲卡死(UX死當),必須改用非同步方式來解決 (瀏覽跟執行層分開) ,經過測試fsockopen確實能開一個新的HTTP請求至目標腳本然後斷線不理 (非同步) ,腳本自動以Web Server中獨立request執行程序,完全不影響前端頁面瀏覽不延遲,能優化UX體驗,不需要用活人獻祭了(改幕後執行),以下是框架及心得分享 要建立fsockopen前需要先使用Xoops的preload機制,preload是XOOPS提供的全域事件機制,可在每次request的特定生命週期節點(如 footer)插入自訂邏輯,使所有頁面都能觸發指定行為,換句話說在模組中執行preload的腳本,Xoops全體頁面都能被觸發事件(全域事件機制),所以拿來當作fsockopen的執行footer非常適合。 preload = XOOPS 全域事件鉤子(Hook) XOOPS 啟動流程中 → 每個 request 都會觸發 preload → 依事件執行(你用的是 Footer) 建立preload方法 先在xoops模組根目錄建立一個preloads,在置入一個core.php檔案 例如:my_modules/preloads/core.php 然後加入以下代碼 <?php class NeilalbumCorePreload extends XoopsPreloadItem { public static function eventCoreFooterStart($args) { //eventCoreFooterStart 所有頁面 / 在輸出footer前 /都會觸發 async_trigger(); } } function async_trigger() { global $xoopsModuleConfig,$xoopsModule,$isAdmin; //做一個$token $secret_id="rEDBzCyHEJ7Yv32ie5JPyB0WmKP9caeDPbkpfc1L"; //可改成自己要的雜奏碼 $ts = time(); $tok...