2013-06-30 16 views
1

我想運行一個單獨的php進程,在我的服務器,進程單獨運行,但是當這個測試運行時,網站的所有其他部分不工作,即整個站點正在等他完成。分離的php進程停止所有站點

當我使用:

 

    ignore_user_abort(true); 
    set_time_limit(0); 

    while(true) 
    { 
     sleep(10); 
    } 

上面的代碼完美地工作,但是當我包括註冊表,控制器和數據庫驅動程序,該網站的其餘部分留等待

如:

 

    ignore_user_abort(true); 
    set_time_limit(0); 

    //Registry, controllers, DB, etc. 

    while(true) 
    { 
     //code[...] 
     sleep(10); 
    } 

+0

這是因爲腳本從不返回。劇本在做什麼? – tlenss

+0

我認爲重要的是你要弄清楚//代碼中的內容會讓其他頁面'掛起'。一場試驗和錯誤的遊戲。如果你知道什麼命令讓php'掛起',那麼這裏的用戶可能會告訴你如何解決它。 – Sumurai8

+3

任何正在使用的會話?如果是這樣,請注意會話使用鎖定。你可以通過調用'session_write_close()'ASAP來避免它,然後只從會話變量中讀取。 – Sven

回答

6

如果您使用會話,您應該閱讀php的會話鎖定模型,具體參見session_write_close()

這裏也可能有web服務器的侷限性,其中只有很多工作進程或線程可用。有許多Web服務器和許多方法來安裝PHP,但是,無論如何,如果你耗盡工作池,如果你執行諸如sleep()或其他任何需要很長時間的東西,你將掛起Web服務器。

一般來說,您應該將長時間運行的腳本完全保留在您的網絡服務器之外。編寫一個單獨的後臺進程來完成這個任務。

+0

好的,問題是缺少session_write_close(); – Mystic