CGIC庫的移植

CGIC是一個支持CGI開發的開放源碼的標準C庫,可以免費使用,只需要在開發的站點和程序文檔中有個公開聲明即可,表明程序使用了CGIC庫,用戶也可以購買商業授權而無需公開聲明。
    CGIC能夠提供以下功能:


 

    1  分析數據,並自動校正一些有缺陷的瀏覽器發來的數據;


 

    2  透明接收用GET或 POST方法發來的From數據;


 

    3   能接受上傳文件;

    4   能夠設置和接收cookies;

    5   用一致的方式處理From元素裏的回車;

    6   提供字符串,整數,浮點數,單選或多選功能來接收數據;

    7   提供數字字段的邊界檢查;

    8   能夠將CGI環境變量轉化成C中的非空字符串;

    9   提供CGI程序的調試手段,能夠回放CGI程序執行時的CGI狀態;

     總之,CGIC是一個功能比較強大的支持CGI開發的標準C庫,並支持Linux, Unix 和Windows等多操作系統。
     以下描述CGIC的移植過程。


 

    從CGIC的主站點http://www.boutell.com/cgic/

   下載源碼,當前最新版本是2.05版。將其解壓並進入源碼目錄


 

    # tar xzf cgic205.tar.gz


 

    # cd cgic205


 

    修改Makefile文件,找到CC=gcc,將其改成CC=arm-linux-gcc,找到AR=ar,將其改成AR=arm-linux-ar,找到RANLIB=ranlib,將其改成RANLIB=arm-linux-ranlib。找到gcc cgictest.o -o cgictest.cgi ${LIBS},將其改成$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS},找到gcc capture.o -o capture ${LIBS},將其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS},並保存退出。

    然後運行make進行編譯,得到的CGIC庫libcgic.a,我們通過調試輔助程序capture和測試程序cgictest.cgi,來驗證生成CGIC庫的正確性。

    將capture和cgictest.cgi拷貝到主機的/nfs/www/cgi-bin目錄下。

 

/*

     博主注:

                測試過程中發現有

arm-linux-gcc -static -o hello.cgi hello.c    靜態編譯

順便看一下log,如果有以下錯誤

cgi_header: unable to find LFLF錯誤,那可能是你下載到板子上的cgi文件沒有執行權限,解決辦法:

chmod +x hello.cgi

 

*/

    在工作站的瀏覽器地址欄輸入http://192.168.67.16/cgi-bin/cgictest.cgi


可以看到頁面,表示CGIC庫和測試腳本都移植成功。cgictest.cgi比較完整的展現了CGIC庫的功能,在開發基於CGIC庫的CGI程序前最好先掌握cgictest.cgi程序,也是用戶開發特定應用程序時的參考範例。

  HTML模板的製作
Web方式的應用開發一般都會將界面和程序邏輯脫離開來,允許在一定程度下更改界面,如改變界面文本的屬性,建立多語言版本等,而無需改動程序邏輯。界面一般由美工來進行製作,而程序員負責具體功能的實現。在 HTML中,表單 (FORM)是最主要的傳遞信息的手段,它適用於任何瀏覽器。表單中有很多元素,包括輸入文本框,單選框,多選框,按鈕,等等,可以提供信息的交互。具體對象說明和語法請參見其他HTML書籍,在這裏不作介紹。根據應用需求,美工或其他設計人員將最後的Web頁面設計出來,作爲程序員進行開發的模板。

    CGI程序的工作一般就是接收表單數據,進行數據處理,最後根據處理結果生成新的頁面返回給瀏覽器。表單數據一般是以POST方法提交給服務器,由CGI程序獲得,程序必須要將界面數據和內部數據對應起來才能夠進行下一步的處理。CGI程序從頁面獲取數據就根據元素名字/值中的元素名字來進行區分。但CGI返回頁面就比較麻煩。由於界面在程序開發完成後還有可能會改變,而且有些需要程序處理的地方可能沒有表單元素,因此對程序來說,不能以表單元素名作爲區分的基礎,一般方法是採用HTML中的註釋來標記。

    程序員需要在模板中爲每一個表單元素以及其他任何需要程序處理的地方,按照一定規則,如註釋的下一行就是表單元素行,建立其註釋標記。CGI程序就可以根據註釋標記來判斷表單元素信息並進行處理。程序逐行讀取模板文件,檢查有無註釋標記,如有的話,則下一行需要進行處理,給表單元素賦上數據,最後就可以返回帶數據的頁面給瀏覽器。

    HTML模板還需要關注的是輸入的檢查。根據輸入檢查越早越好的原則,需要在用戶界面上就對用戶提交的數據進行檢查。目前一般是採用javascript腳本的方式。當用戶提交數據時,表單對象的onSubmit方法就會被調用,在該方法裏就可以對用戶的輸入進行檢查。常用的檢查有是否必需、最大/小長度、是否字符、是否數字、email地址、IP地址是否正確、是否匹配一個正則表達式等。

CGI程序的開發
    CGI程序的工作一般就是接收表單數據,根據應用需求進行數據處理,最後根據處理結果生成新的頁面返回給瀏覽器。表單數據一般是以POST方法提交給服務器,由CGI程序獲得,程序根據元素名字/值中的元素名字來區分數據,完成數據處理後,再讀取相應的模板文件,根據註釋標記將對應的數據填充到HTML文本中去,生成最後的頁面返回給瀏覽器。

    程序一般邏輯爲:

   1.  安全性檢查,是否允許運行腳本;

    2.  處理用戶提交的數據,根據元素名字/值中的元素名字來區分數據,然後根據應用需求進行數據處理;

    3.  將處理結果填充表單,根據註釋標記將對應的數據填充到HTML文本中去,生成最後的頁面返回給瀏覽器。

    關於具體的代碼實現細節,用戶可以參考《嵌入式Linux系統開發詳解-基於EP93XX系列ARM》一書的相關章節,該書在本網站提供全文下載:

http://www.emsyschina.com/Publication.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章