'PHP的TS和NTS有何區別,PHP在各環境下的偽靜態是如何配置的'

PHP Nginx Apache Linux Windows 今頭日條一小馬奔騰 2019-09-12
"

教程力薦

ts(Thread-Safety)即線程安全,多線程訪問時,採用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據汙染php以ISAPI方式加載的時候選擇這個版本.,php以ISAPI方式加載的時候選擇這個版本.

nts(None-Thread Safe)即非線程安全,就是不提供數據訪問保護,有可能出現多個線程先後更改數據造成所得到的是 髒數據php以fast cgi方式運行的時候選擇這個版本,具有更好的性能;

ISAPI(Internet Server Application Programming Interface), 通常是指被http服務器所加載,以服務器的模塊形式運行,由微 軟提出,故只能在win平臺上運行,例如win下的apache,iis[據說用fast cgi 方式工作更穩定],而linux上php 則以 Apache模塊或者php-fpm的方式運行。

cgi(Common Gateway Interface):HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,說白了,cig就是一種 後臺語言,其可以和服務器之間進行通訊。此時的php是作為一個獨立的程序運行的。特點就是耗費內存。

fast cgi.是一個常駐(long-live)型的CGI,它可以一直執行著,只要激活後,不會每次都要花費時間去fork.這種方式 是與語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中並因此獲得較 高的性能。

ISAPI執行方式是以DLL動態庫的形式使用,可以在被用戶請求後執行,在處理完一個用戶請求後不會馬上消失,所以需要進行線程安全檢查,這樣來提高程序的執行效率,所以如果是以ISAPI來執行PHP,建議選擇ThreadSafe版本。

而FastCGI執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去線程安全檢查的防護反而可以提高執行效率,所以,如果是以FastCGI來執行PHP,建議選擇NonThread Safe版本。

通過phpinfo(); 查看其中的 Thread Safety 項,這個項目就是查看是否是線程安全,如果是:enabled,一般來說應該是ts版,否則是nts版。


PHP各環境下的偽靜態是如何配置的呢,以下來詳細介紹

一、Apache的偽靜態配置

1、網站根目錄下需要有 .htaccess 文件,沒有則自己創建一個,代碼如下:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

如果你的apache是fastcgi模式下,則需要修改為這樣:

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
替換成
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

這一點有些友友會經常配置錯誤,請多多注意!

2、在apache的配置文件httpd.conf中查找 : LoadModule rewrite_module modules/mod_rewrite.so 將前面的#去掉,假如沒有這段內容,則需要手動加上

3、在apache的配置文件httpd.conf中查找所有的 AllowOverride None,將 None 都替換成 All . 保存文件 並重啟apache服務。

二、Nginx的偽靜態配置

找到nginx的配置文件 nginx.conf, 在裡面的 server{ } 裡增加以下內容

location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

重啟nginx即可生效


三、IIS的偽靜態配置

如果你的服務器環境支持ISAPI_Rewrite的話,可以配置httpd.ini文件,添加下面的代碼:

RewriteRule (.*)$ /index\\.php\\?s=$1 [I]

在IIS的高版本下面可以配置web.Config,在中間添加rewrite節點:

<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
"

教程力薦

ts(Thread-Safety)即線程安全,多線程訪問時,採用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他線程不能進行訪問直到該線程讀取完,其他線程才可使用。不會出現數據不一致或者數據汙染php以ISAPI方式加載的時候選擇這個版本.,php以ISAPI方式加載的時候選擇這個版本.

nts(None-Thread Safe)即非線程安全,就是不提供數據訪問保護,有可能出現多個線程先後更改數據造成所得到的是 髒數據php以fast cgi方式運行的時候選擇這個版本,具有更好的性能;

ISAPI(Internet Server Application Programming Interface), 通常是指被http服務器所加載,以服務器的模塊形式運行,由微 軟提出,故只能在win平臺上運行,例如win下的apache,iis[據說用fast cgi 方式工作更穩定],而linux上php 則以 Apache模塊或者php-fpm的方式運行。

cgi(Common Gateway Interface):HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,說白了,cig就是一種 後臺語言,其可以和服務器之間進行通訊。此時的php是作為一個獨立的程序運行的。特點就是耗費內存。

fast cgi.是一個常駐(long-live)型的CGI,它可以一直執行著,只要激活後,不會每次都要花費時間去fork.這種方式 是與語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中並因此獲得較 高的性能。

ISAPI執行方式是以DLL動態庫的形式使用,可以在被用戶請求後執行,在處理完一個用戶請求後不會馬上消失,所以需要進行線程安全檢查,這樣來提高程序的執行效率,所以如果是以ISAPI來執行PHP,建議選擇ThreadSafe版本。

而FastCGI執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去線程安全檢查的防護反而可以提高執行效率,所以,如果是以FastCGI來執行PHP,建議選擇NonThread Safe版本。

通過phpinfo(); 查看其中的 Thread Safety 項,這個項目就是查看是否是線程安全,如果是:enabled,一般來說應該是ts版,否則是nts版。


PHP各環境下的偽靜態是如何配置的呢,以下來詳細介紹

一、Apache的偽靜態配置

1、網站根目錄下需要有 .htaccess 文件,沒有則自己創建一個,代碼如下:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
</IfModule>

如果你的apache是fastcgi模式下,則需要修改為這樣:

RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
替換成
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]

這一點有些友友會經常配置錯誤,請多多注意!

2、在apache的配置文件httpd.conf中查找 : LoadModule rewrite_module modules/mod_rewrite.so 將前面的#去掉,假如沒有這段內容,則需要手動加上

3、在apache的配置文件httpd.conf中查找所有的 AllowOverride None,將 None 都替換成 All . 保存文件 並重啟apache服務。

二、Nginx的偽靜態配置

找到nginx的配置文件 nginx.conf, 在裡面的 server{ } 裡增加以下內容

location / {
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
}

重啟nginx即可生效


三、IIS的偽靜態配置

如果你的服務器環境支持ISAPI_Rewrite的話,可以配置httpd.ini文件,添加下面的代碼:

RewriteRule (.*)$ /index\\.php\\?s=$1 [I]

在IIS的高版本下面可以配置web.Config,在中間添加rewrite節點:

<rewrite>
<rules>
<rule name="OrgPage" stopProcessing="true">
<match url="^(.*)$" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^(.*)$" />
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="index.php/{R:1}" />
</rule>
</rules>
</rewrite>
PHP的TS和NTS有何區別,PHP在各環境下的偽靜態是如何配置的

點擊瞭解更多去學習:非常使用的代碼優化,怎麼才能寫好代碼

"

相關推薦

推薦中...