其實會想用 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...
建置網站最怕遇到的就是舊資料移轉,有時候檔案數量龐大,一個一個下載手都酸了,經查詢發現有更好的方法能決這問題,這裡將經驗分享給大家!! 例如這一個頁面,有60幾個PDF檔要下載,一個一個下載完天都亮了!!這時候真的需要借用工具的力量來幫我們自動化處理!! 推薦一個好用的Chrome瀏覽器批次下載套件DownThemAll! 先點Chrome瀏覽器最右上方的三個橫點,打開選單,找到「擴充功能」再選擇子選單「前往Chrome應用程式商店」 然後輸入關鍵字「DownThemAll」找到套件後安裝起來,接下來前往要下載檔案的頁面,點選右上方的工具列,找到DownThemAll,點選打開! 選擇DownThemAll打開設定選單,選擇DownThemAll,透過篩選器選擇設定 完成後按下載,只需要enter到底就能下載完成,檔案預設會放在C:\XXXX\XXXXX\Downloads\downthemall 目錄中 或是選擇OneClick也能下載, 一樣只需要鍵盤enter一直按到叮咚一聲,檔按下載就完成,至於為什麼要用OneClick,主要是他能模擬人工點擊,如果用批次,若是檔案中又包有iframe就會被下載兩次,或是更多次,因此OneClick是個不錯的決方法,經實測頁面60個pdf檔批次下載回來也是60個,數量正確檔按無缺損,這套件確實能解決大量檔案下載問題,有需要的朋友可以參考看看!! 備註:OneClick 模式並非解析整頁資源,而是僅擷取使用者可見之下載連結,等同模擬人工點擊流程,因此可避免因 iframe 或預覽機制造成的重複下載問題。 工作心得撰寫: 徐嘉裕 Neil hsu