典型的WebServer如IIS,Apache自身只支援靜態網頁,也就是純html網頁。為了能動態給使用者返回資料,需要在伺服器端進行動態產生html網頁的計算。WebServer本身並不支援這種計算,而是調用其他的模組來進行計算,目前有三種方式:
一下以IIS說明:
(1)CGI方式,IIS進程會啟動另一個進程並執行用戶端請求的應用程式A.exe,A.exe通過進程間通訊機制從IIS進程擷取相關資訊產生HTML,IIS從A.exe進程擷取該HTML檔案後返回給用戶端瀏覽器。這種方式看似很直接,很模組化,而且A.exe的不穩定不會導致IIS不穩定。但是存在很多問題:首先是IIS和A.exe分屬兩個進程,進程間交換資料速度慢;再次,IIS每處理一次請求就需要啟動一個A.exe進程,但請求很多時,大量進程佔用伺服器大量資源。
目前,這種方式的程式也很多,如PHP的指令碼引擎就可以配置成這種方式,工作原理如下:當用戶端提交副檔名為.php的請求時,IIS啟動PHPEngine.exe(假設PHP引擎程式名)進程,然後把資料交由其處理,處理完畢後產生HTML,IIS擷取此HTML檔案後返回給用戶端。當然,由於PHPEngine.exe要處理所有的.php指令碼請求,所以該進程可以常駐記憶體。
(2)ISAPI方式,此方式下動態產生HTML頁的程式不再是運行在單獨進程中,而是與IIS運行在同一進程,作為單獨進程執行。所有多線程相對於多進程的優勢都體現出來了,速度有了很大提升,資源節約了不少,但是此線程的穩定性會影響到IIS進程。
PHP也可以運行在這種方式下,此時的PHP執行引擎變成了PHPEngine.dll。
在IIS下,要想讓ISAPI程式正確執行,要做到兩點,一是IIS允許ISAPI的執行,也就是全域的可執行; 二是該dll所在目錄的可執行,也就是子目錄可執行。
首先在IIS管理器中要右鍵該dll所在目錄-->屬性-->目錄選顯卡-->執行許可權-->指令碼和可執行,完成上述要求的第2點;
再次在IIS管理器中左鍵Web服務擴充,在右側面板中選中“允許所有未知ISAPI擴充”。
OK,這樣你的ISAPI程式就可以執行了。