自PHP 5.3.1版本開始,便已不在支援ISAPI模式,那為什麼在windows下PHP官方仍然發布NTS和TS兩個版本?
回複內容:
自PHP 5.3.1版本開始,便已不在支援ISAPI模式,那為什麼在windows下PHP官方仍然發布NTS和TS兩個版本?
沒有人造嗎?這是要沉的節奏啊!
ISAPI 伺服器擴充是可以被 HTTP 伺服器載入和調用的 DLL。網際網路服務器擴充也稱為 網際網路服務器應用程式
(ISA),用於增強符合 網際網路伺服器 API (ISAPI) 的伺服器的功能。ISA
通過瀏覽器應用程式調用,並且將相似的功能提供給通用閘道介面 (CGI) 應用程式。
php5 non-thread-safe和thread-safe這兩個版本的區別
從PHP5.2.10版本開始(現在有PHP5.2.10和5.3兩個版本),有None-Thread Safe與Thread
Safe兩種版本的可供選擇,這兩種版本有何不同,作為使用者來說又應該如何選擇呢?下面聚友將為您講述。
先從字面意思上理解,None-Thread Safe就是非安全執行緒,在執行時不進行線程(thread)安全檢查;Thread
Safe就是安全執行緒,執行時會進行線程(thread)安全檢查,以防止有新要求就啟動新線程的 CGI 執行方式耗盡系統資源。
再來看PHP的兩種執行方式:ISAPI和FastCGI。FastCGI執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去安全執行緒檢查的防護反而可以提高執行效率,所以,如果是以
FastCGI(無論搭配 IIS 6 或 IIS 7)執行 PHP ,都建議下載、執行 non-thread safe 的 PHP (PHP
的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip
套件)。而安全執行緒檢查正是為ISAPI方式的PHP準備的,因為有許多php模組都不是安全執行緒的,所以需要使用Thread Safe的PHP。
按照這兩段文字所講解的來解讀的話,確實是不需要TS版本的了。
但一定還是有地方需要TS版,不然乾脆分為ISAPI版和FastCGI版了,而不是TS和NTS。
apache的mod_php是多線程模式,有些命令列的php應用也需要多線程支援。
Linux上的PHP同樣有NTS和TS版本的區別,預設是NTS版本,configure時加上--enable-maintainer-zts則編譯為TS版本.什麼時候需要TS版本呢?比如你要使用pthreads這個多線程的PECL擴充時,或者PHP以MOD_PHP嵌入多線程運行下的Apache,比如Apache在Linux上提供的Event MPM就是一個多進程多線程的工作模型,Windows上Apache採用的WinNT MPM也是一個多執行緒模式,這時都需要TS版本的PHP.
而如果以PHP-FPM(比如搭配Nginx或者Apache的mod_fastcgi)或者PHP-CGI(比如搭配Apache的mod_fcgid或者Win上的IIS)來運行PHP,則一般都不需要TS安全執行緒版本的PHP.