Re: [請益] 資料處理時間過長的替代方案
※ 引述《freehand1122 ( )》之銘言:
: 最近在維護某個網站,開發語言是php、資料庫是mysql
: 有做了一個功能會涉及檔案IO、資料處理和匯入資料庫三個部分
: 但是這個功能約需花費1分鐘的時間
: 也就是client約需要等待1分鐘,server才會回應
: 這對現在瀏覽網頁的人來說,可能是件痛苦的事情...
: 請問有沒有什麼方法讓server做自己的工作的同時,client也可以做其他事情
: 而不用等待server回應
: 有想過用第三方語言做這個功能,而只將網頁當成介面
: 不知道這樣的想法可不可行,或者有更好的解決方法
: 感謝
依照你的需求,看起來你需要:
1.對於執行不會進行等待,或可以產生獨立程序的 func
2.能夠有辦法得知後面處理的進度,結束或否
執行而不等待可以用 fsockopen,
把要執行的部份寫成獨立 php,榜定 REMOTE_ADDR 以防被亂搞,
模擬 http head 送出去之後不繼續用 fgets 之類取回應,
這樣可以送出一個斷線的背景執行。
http://php.net/manual/en/function.fsockopen.php
如果同樣斷線放風箏的方式要用 fopen 來做會相對複雜一點
(不是 code 的長短,而是要把設定改來改去…),可以參考
http://php.net/manual/en/function.fopen.php#64262
如果要走獨立程序,可以參考 pcntl_fork
http://php.net/manual/en/function.pcntl-fork.php
至於執行完之後怎麼讓 client 知道,
最簡單的就是在 session 裡東改西改,
看是要 client 在每次重新換頁就去檢查(被動),
或另外再加上 js 背後定時送 request 去問(偽主動)。
--
題外話…因為小弟一直在 php4 裡滾,所以這些都是 4 的解法,
php 5 應該會有其他更好用的 func,您可以再找看看 o_oa"
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.168.232.104
※ 編輯: gpmm 來自: 118.168.232.104 (03/10 01:07)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章