close

※ 引述《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 去問(偽主動)。



轉自PTT

作者: gpmm (銀色) 看板: PHP

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 uetoaya 的頭像
    uetoaya

    uetoaya的部落格

    uetoaya 發表在 痞客邦 留言(0) 人氣()