伺服器端內嵌

伺服器端內嵌Server Side Includes,亦簡稱為SSI)是一種大多數僅套用於網際網路上的簡單解釋性伺服器端腳本語言。

基本介紹

  • 中文名:伺服器端內嵌
  • 外文名:Server Side Includes
  • 簡稱:SSI
  • 領域:計算機
簡介,指令,最常用的指令集,控制指令,網頁伺服器,圖靈完全性,

簡介

SSI最常見的用法是將一個或多個檔案的內容包含在網頁伺服器的頁面上。例如,一張包含每日報價的頁面可以通過下面一段代碼將報價單包含在頁面中:
<!--#include virtual="../quote.txt" -->
若更改quote.txt檔案,則所有包含此檔案的頁面都會展示最新的每日報價。這個包含不止局限於檔案,而且還有來自程式的文本輸出,或者是如當前時間的系統變數。
伺服器端內嵌常用於在整個站點中包含一段公共代碼,例如頁眉、頁腳與導航欄。使用控制代碼可以有條件地將導航欄包含在內。
為了讓網頁伺服器辨識啟用了伺服器端內嵌的HTML檔案,從而運行這段代碼。則檔案名稱應有特殊的擴展名,默認為.shtml、.stm和.shtm;或者伺服器設定檔案的執行標記以配置為允許伺服器端內嵌。
作為一種簡單的程式語言,伺服器端內嵌僅支持一種數據類型:純文本。它的控制流程相當簡單,支持選擇,但循環不被原生支持,且只可以通過包含遞歸式或URL重定向的方式進行。這種簡單設計的語言使得其比大多數伺服器端腳本語言都更易於上手學習使用,而複雜的伺服器端處理過程通常使用功能更豐富的程式語言之一來完成。伺服器端內嵌擁有圖靈完備性
ApacheLiteSpeednginxlighttpdIIS五大主流網頁伺服器軟體均支持此種語言。
SSI的語法相當簡單:<!--#directive parameter=value parameter=value -->。這些指令都放在HTML注釋區,所以若SSI功能並未啟用時,除非其預覽頁面原始碼,否則用戶將不會在頁面上看到這些SSI指令。請注意這種語言的語法中不允許在開頭的"<"和指令之間存在空格。

指令

最常用的指令集

指令參數描述舉例
include
file或virtual
此指令可能是最常用的SSI指令,允許其中一個文檔中的內容被包含在另外一個文檔內。file或virtual參數指定被包含的檔案(HTML頁面、文本檔案、腳本等)。包含了其他檔案中的內容或是運行CGI腳本的結果。若進程沒有許可權閱讀檔案或執行腳本,檔案包含將會失敗。“virtual”參數指定相對於域根的目標,而“file”參數則指定相對於當前檔案目錄的路徑。當使用“file”參數時,禁止引用絕對路徑。除非被明確配置,對更高級目錄(..)的訪問通常是被禁止的。Apache文檔相對“file”參數更推薦使用“virtual”參數。
<!--#include virtual="menu.cgi" -->

<!--#include file="footer.html" -->Apache的SSI教程規定格式為在閉合元素的“-->”之前留出空格。
exec
cgi或cmd
此指令運行伺服器上的程式、腳本亦或是Shell命令。“cmd”參數特指服務端的命令;“cgi”參數特指CGI腳本的路徑。當前SSI腳本的PATH_INFO和QUERY_STRING均會傳遞到CGI腳本中,結果應運行“exec cgi”而非“include virtual”。
<!--#exec cgi="/cgi-bin/foo.cgi" -->

<!--#exec cmd="ls -l" -->
echo
var
此指令將顯示特定HTTP環境變數的內容。這些變數包括HTTP_USER_AGENT、LAST_MODIFIED和HTTP_ACCEPT。
<!--#echo var="REMOTE_ADDR" -->
config
timefmt、sizefmt或errmsg
此指令配置日期、時間、檔案大小和錯誤信息(SSI命令執行失敗的時候反饋)的顯示格式。
<!--#config timefmt="%y %m %d" -->

<!--#config sizefmt="bytes" -->

<!--#config errmsg="SSI命令運行失敗!" -->
flastmod或fsize
file或virtual
這些指令顯示特定文檔最近一次被修改的時間,或者是特定文檔的大小。“file”或“virtual”參數指明所使用的文檔。“file”參數將文檔定義為相對於文檔路徑;“virtual”參數將文檔定義為相對於文檔根目錄。
<!--#flastmod virtual="index.html" -->

<!--#fsize file="script.pl" -->
printenv
此指令輸出所有的變數和它們的值,這些變數包含環境變數和用戶定義變數。它沒有任何屬性。
<!--#printenv -->

控制指令

指令參數描述舉例
if
expr
用於進行一個物理頁面可能會生成的多個邏輯頁面的條件測試。
<!--#if expr="${Sec_Nav}" -->
<!--#include virtual="" -->
<!--#endif -->
elif
expr
與程式語言中的進一步條件測試具有相同用途。
<!--#if expr="${Sec_Nav}" -->
<!--#include virtual="secondary_nav.txt" -->
<!--#elif expr="${Pri_Nav}" -->
<!--#include virtual="primary_nav.txt" -->
<!--#endif -->
else
如果沒有if和elif指令捕捉到現在的情況,這裡的事情就會發生。
<!--#if expr="${Sec_Nav}" -->
<!--#include virtual="secondary_nav.txt" -->
<!--#else -->
<!--#include virtual="article.txt" -->
<!--#endif -->
endif
參見上方例子。
set
var、value
設定SSI變數的值。(雖然同時出現在Apache httpd和lighttpd中,但不是所有的軟體都支持此指令。)
<!--#set var="foo" value="bar" -->

網頁伺服器

網頁伺服器(Web server)一詞有兩個意思:
  1. 一台負責提供網頁的電腦,主要是各種程式語言構建而成,透過HTTP協定傳給客戶端(一般是指網頁瀏覽器)。
  2. 一個提供網頁的伺服器程式。
每一台網頁伺服器(第1個意思)會運行最少一個網頁伺服器程式(第2個意思)。作為第1個意思,大陸地區稱為網站伺服器。此外,也通稱作Web伺服器

圖靈完全性

可計算性理論里,如果一系列運算元據的規則(如指令集程式語言細胞自動機)可以用來模擬單帶圖靈機,那么它是圖靈完備的。這個詞源於引入圖靈機概念的數學家艾倫·圖靈
雖然圖靈機會受到儲存能力的物理限制,圖靈完全性通常指“具有無限存儲能力的通用物理機器或程式語言”。

相關詞條

熱門詞條

聯絡我們