在我看來,一個網絡應用程序不斷運行;因此,我對文檔頁面感到困惑,這些頁面談論PHP腳本的「結尾」(例如this one)。這樣的引用似乎指的是每個Web請求的結束,但是如果腳本在那裏結束,並不意味着操作系統必須爲每個請求設置一個全新的進程?這看起來不太可能,因爲旋轉一個全新的流程是昂貴的,並且整個網站的效率非常低。PHP腳本何時結束?
2
A
回答
6
這裏有一個區別:PHP不是一個Web服務器。因此,PHP腳本的結尾與Web服務器的實際結束(或至少大部分時間)無關。
連續運行的Web服務器軟件(如IIS,Apache或Lighttpd)可以執行PHP腳本而不會自行結束。這些腳本,在末尾做停止運行。 Web服務器如何爲腳本設置執行環境取決於採取的方法。例如,Apache 2確實可以爲每個Web請求產生一個子進程,儘管它每次都不會再設置整個Web服務器:有一個主進程命令子進程執行設置和參數。
因此,PHP腳本在Web請求結束時結束;也就是說,當腳本到達一條使其停止的語句(如致命錯誤,exit
語句等)或到達腳本源的實際結尾時。
編輯關於產卵的新要求新過程的效率。
如今,服務器不會爲PHP本身產生一個單獨的進程:它們使用PHP庫來嵌入語言並使用它。但是,服務器確實可以爲每個接收到的HTTP請求生成一個進程。 Apache使用它的mpm_prefork
模塊。
雖然產生一個新的進程的確是昂貴的,它比腳本本身的成本,這可能要持續10分之秒,這是很多,不僅僅是產卵過程更加的時候可能什麼都沒有。
此外,服務器通常必須一次爲多個客戶端服務;因此,按順序處理每個請求是不可想象的。它們必須同時運行,並且實現者有兩個選擇:線程或進程。 PHP在許多平臺上都不是線程安全的,通常最好是在單獨的進程中運行它。
3
是的,這是實際發生的事情,每個請求。這是PHP的本質。
相關問題
- 1. PHP腳本過早結束
- 2. PHP腳本過早結束
- 3. 腳本結束
- 4. 結束Python腳本
- 5. 會話結束時運行腳本
- 6. 腳本在error.log結束時停止
- 7. PHP腳本在沒有錯誤的情況下超時結束
- 8. PHP中的MySQL:腳本結束時關閉連接?
- 9. 腳本提前結束?
- 10. 如何在不結束php腳本的情況下顯示ajax結果? jquery - PHP
- 11. 如何結束腳本標記?
- 12. PHP:如何在腳本結束之前顯示頁面?
- 13. 如何在xfce會話結束時執行腳本
- 14. 如何在從cygwin運行時結束s Powershell腳本
- 15. 如何讓腳本在執行結束時自動刪除?
- 16. CloudFormation模板安裝但沒有指示腳本何時結束
- 17. 其他腳本的查詢鎖定表,直到我的PHP腳本結束
- 18. 執行PHP腳本時顯示結果
- 19. 獲得通過jQuery負載從PHP腳本結果()php腳本前函數結束
- 20. 我應該結束我的PHP腳本退出或退出;?
- 21. 不能重定向到另一頁在PHP腳本結束
- 22. PHP web服務,在腳本執行結束前發送響應
- 23. perl腳本結束會發生什麼?
- 24. 解析腳本永不結束
- 25. Apache:標題前腳本輸出結束
- 26. shell腳本:文件意外結束
- 27. 等到其他python腳本結束
- 28. shell腳本等到過程結束
- 29. 腳本標題提前結束:CGI + C++
- 30. $ _SESSION設置等待腳本結束
是的。服務器比你想象的要快得多。 PHP二進制文件保存在內存中,除非它是一個CGI,然後在每個請求中加載一個完整的php進程。 – 2010-04-20 23:27:41