原理
將內容傳送到瀏覽器之前,可以使用“伺服器端包含(SSI)”指令將文本、圖形或應用程式信息包含到網頁中。例如,可以使用SSI包含時間/日期戳、著作權聲明或供客戶填寫並返回的表單。對於在多個檔案中重複出現的文本或圖形,使用包含檔案是一種簡便的方法。將內容存入一個包含檔案中即可,而不必將內容輸入所有檔案。通過一個非常簡單的語句即可調用包含檔案,此語句指示Web伺服器將內容插入適當網頁。而且,使用包含檔案時,對內容的所有更改只需在一個地方就能完成。
因為包含SSI指令的檔案要求特殊處理,所以必須為所有SSI檔案賦予SSI檔案擴展名。默認擴展名是.stm、.shtm和.shtml
作用
之所以要扯到SSI,是因為shtml--server-parsedHTML的首字母縮略詞。包含有嵌入式伺服器端包含命令的HTML文本。在被傳送給瀏覽器之前,伺服器會對SHTML文檔進行完全地讀取、分析以及修改。
shtml和asp有一些相似,以shtml命名的檔案里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML檔案中寫入SSI指令,當客戶端訪問這些shtml檔案時,伺服器端會把這些SHTML檔案進行讀取和解釋,把SHTML檔案中包含的SSI指令解釋出來。
比如:你可以在SHTML檔案中用SSI指令引用其他的html檔案(#include),伺服器傳送給客戶端的檔案,是已經解釋的SHTML不會有SSI指令。它實現了HTML所沒有的功能,就是可以實現了動態的SHTML,可以說是HTML的一種進化吧。像新浪的新聞系統就是這樣的,新聞內容是固定的但它上面的廣告和選單等就是用#include引用進來的。
主要有以下幾種用用途:
1、顯示伺服器端環境變數<#echo>
2、將文本內容直接插入到文檔中<#include>
3、顯示WEB文檔相關信息<#flastmod#fsize>(如檔案製作日期/大小等)
4、直接執行伺服器上的各種程式<#exec>(如CGI或其他可執行程式)
5、設定SSI信息顯示格式<#config>;(如檔案製作日期/大小顯示方式)高級SSI<XSSI>;可設定變數使用if條件語句。
支持
Apache默認是不支持SSI的,需要我們更改httpd.conf來進行配置。我這裡以windows平台的Apache2.0.x為例:打開conf目錄下的httpd.conf檔案,搜尋“AddTypetext/html.shtml”,搜尋結果:
#AddTypetext/html.shtml
#AddOutputFilterINCLUDES.shtml
把這兩行前面的#去掉。
然後搜尋“OptionsIndexesFollowSymLinks”
在搜尋到的那一行後面添加“Includes”
即將該行改變為:
OptionsIndexesFollowSymLinksIncludes
保存httpd.conf,重起apache即可。
開啟shtml
打開檔案./include/config.inc.php<?php
//資料庫配置信息
define('DB_HOST','localhost');//資料庫伺服器主機地址
define('DB_USER','root');//資料庫帳號
define('DB_PW','root');//資料庫密碼
define('DB_NAME','phpcmsutf');//資料庫名
define('DB_PRE','phpcms_');//資料庫表前綴,同一資料庫安裝多套Phpcms時,請修改表前綴
define('DB_CHARSET','utf8');//資料庫字元集
define('DB_PCONNECT',0);//0或1,是否使用持久連線
define('DB_DATABASE','mysql');//資料庫類型
//網站路徑配置
define('PHPCMS_PATH','/cms/phpcms_utf/');//Phpcms框架訪問路徑,相對於域名
//shtml支持
將它:
define('SHTML',0);//是否支持shtml,需要伺服器支持,並且生成檔案擴展名為shtml
改成:
define('SHTML',1);//是否支持shtml,需要伺服器支持,並且生成檔案擴展名為shtml。
nginx
編輯nginx配置檔案vi/usr/local/nginx/conf/nginx.conf
加入如下代碼ssion;
ssi_silent_errorson;
ssi_typestext/shtml;
保存重啟nginx
使用
SSI是為WEB伺服器提供的一套命令,這些命令只要直接嵌入到HTML文檔的注釋內容之中即可。如:
<!--#includefile="info.htm"-->
就是一條SSI指令,其作用是將"info.htm"的內容拷貝到當前的頁面中,當訪問者來瀏覽時,會看到其它HTML文檔一樣顯示info.htm其中的內容。
其它的SSI指令使用形式基本同剛才的舉例差不多,可見SSI使用只是插入一點代碼而已,使用形式非常簡單。
當然,如果WEB伺服器不支持SSI,它就會只不過將它當作注釋信息,直接跳過其中的內容;瀏覽器也會忽略這些信息。
如何在我的WEB伺服器上配置SSI功能?
在一些WEB伺服器上(如IIS4.0/SAMBAR4.2),包含#include指令的檔案必須使用已被映射到SSI解釋程式的擴展名;否則,Web伺服器將不會處理該SSI指令;默認情況下,擴展名.stm、.shtm和.shtml被映射到解釋程式(Ssinc.dll)。
Apache則是根據你的設定情況而定,修改srm.conf如:
AddTypetext/x-server-parsed-html.shtml將只對.shtml擴展名的檔案解析SSI指令
AddTypetext/x-server-parsed-html.html將對所有HTML文檔解析SSI指令
NetscapeWEB伺服器直接使用AdministrationServer(管理伺服器)可打開SSI功能。
Website使用ServerAdmin程式中的Mapping標籤,擴展名添加內容類型為:wwwserver/html-ssi
Cern伺服器不支持SSI,可用SSI詐欺法,上下載一個PERL腳本,即可使你的CERN伺服器使用一些SSI指令。(不支持exec指令。)