在我看來,一個網絡應用程序不斷運行;因此,我對文檔頁面感到困惑,這些頁面談論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. PHP結束腳本執行全自動
- 6. 在PHP腳本中意外的$結束?
- 7. 腳本在error.log結束時停止
- 8. 會話結束時運行腳本
- 9. Bash腳本,閱讀結束腳本?
- 10. PHP中的MySQL:腳本結束時關閉連接?
- 11. PHP腳本在沒有錯誤的情況下超時結束
- 12. PHP腳本結束時將數據寫入日誌文件
- 13. 當PHP腳本結束時自動刷新ob_start()
- 14. 腳本立即結束
- 15. 腳本在UserDialog上結束
- 16. 腳本提前結束?
- 17. 將Python腳本作爲啓動腳本運行時結束?
- 18. 如何在不結束php腳本的情況下顯示ajax結果? jquery - PHP
- 19. 爲什麼PHP腳本在任何echo/output之前等待「結束腳本」?
- 20. 如何結束腳本標記?
- 21. 爲什麼我的腳本在outpitong結果之前結束PHP
- 22. PHP:如何在腳本結束之前顯示頁面?
- 23. php腳本20分鐘後結束,windows server php 5.3
- 24. 在PHP腳本結束之前PHP向用戶返回輸出
- 25. 如何在Magento訂單流程結束時執行腳本?
- 26. 如何在從cygwin運行時結束s Powershell腳本
- 27. 如何在xfce會話結束時執行腳本
- 28. 如何在功能完成時結束腳本?
- 29. 如何在單擊鏈接時停止切換腳本結束?
- 30. 如何讓腳本在執行結束時自動刪除?
是的。服務器比你想象的要快得多。 PHP二進制文件保存在內存中,除非它是一個CGI,然後在每個請求中加載一個完整的php進程。 – 2010-04-20 23:27:41