茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1669423 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_0026.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

網頁設計 : [分享]IND網路教學CGI的簡介和應用

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[分享]IND網路教學CGI的簡介和應用
IND網路教學CGI的簡介和應用



一、共通閘道介面CGI是什麼?
共通閘道介面是一個資訊伺服主機對外資訊服務的標準介面(如HTTPd及CERN Servers),如下圖。簡單地說就是一個閘道介面在一般超文件與伺服主機上的應用程式的中間。

二、何謂CGI程式語言?
事實上,任何一個程式語言可以在伺服主機上,利用CGI介面來執行的應用服務,皆可稱之為「CGI程式
語言」。若伺服主機是用NCSA HTTPd server服務器版本的話,通常CGI程式語言會存於叫cgi-bin的目錄裡。
三、CGI程式是如何從伺服主機上得到相關資訊?
CGI程式處理客端的資訊因操作系統平台的不同(如:Unix及MS-Windows),而會有所差異。在Unix系統上
CGI程式是利用格式標籤FORM上的Method="post"來取得一個以標準輸入stdin的字元字串,這字元字串可以
有不止一個用戶輸入值,每一個輸入值會以「&」符號來隔開。而在MS-Windows操作視窗平台上,會透過
檔案介面(file-based interface)來完成。
四、CGI程式如何送回相關資訊給瀏覽器?
CGI程式傳回相關訊息也因操作平台的不同,而也有所不一樣。在Unix系統上,會以一個標準輸出stdout送回
相關訊息給資訊伺服主機,然後由資訊伺服主機顯示資訊至用戶的瀏覽器上。而在MS-Windows操作平台上,
是以檔案輸出、輸入方式來達成資訊傳遞的效果。
五、目前最受歡迎的CGI程式語言是那些?
目前最受歡迎的CGI程式語言有四;C、Shell、Perl和Visual Basic語言。但其它程式語言
(如:Fortran、TCL及AppleScript)也是大有人在使用。
六、為什麼無法執行CGI程式?
無法執行CGI程式的原因有好幾種,也可以因不同HTTPd伺服器不同,而有所差異。以下,列出常見之錯誤
情況以供讀者參考:

  • 把程式放入非CGI目錄裏?

在UNIX HTTPd伺服器上,使用者只能把其CGI程式放在其系統規定下的/cgi-bin目錄裡,而非使用者自己本身
的HTML目錄裡。因為只有在/cgi-bin目錄上,才有外部呼叫執行外部指令的功能。此外,有些系統管理員只
設定少數用戶(例:superuser或root),才能使用/cgi-bin目錄,所以讀者請在編寫CGI程式之前,先行確認是
否有資格去使用/cgi-bin目錄,否則白白浪費時間是很划不來的。在IND這部機器上,則因透過了一個程式
〝cgiwrap〞,若想加入cgi的程式,只須在自己的根目錄中的www目錄裡,建個cgi-bin的目錄,並把cgi
的程式放入其中,再以http://ind.ntou.edu.tw/cgi-bin/cgiwrap/~username/cgi-files來呼叫cgi的程式即可使用。


  • 忘記更改程式屬性了(chmod 755)?

這個問題常常發生在Unix系統上,通常使用者在編寫程式時,設定為只能自己執行的程式屬性。所以只要使
用者利用chmod 755去更改其屬性為每個人都可以使用的屬性即可。
七、CGI的應用
範例:
A、原始程式的取得
原始程式的取得guestmsg.tgz和count.tgz(guestmsg.tgz)並在
Server主機上用tar zxvf filename把檔案解開。
B、留言版的製作:
此範例是一個來賓留言板,其目的要顯示使用者的資料在瀏覽器上,而輸入的HTML文件內容如下:
1、(在html部份)
來賓留言板的HTML文件內容:

<title>來賓留言板</title>
<form method="post" action="http://ind.ntou.edu.tw/cgi-bin/cgiwrap/~refined/guestmsg.cgi">
您的大名:<input name="name" size="20">
您的E-Mail:<input name="email" size="30">
你的網?#125;:<input name="homepage" size="40">
您的意見或資料:<textarea name="suggest" cols=30 rows=4></textarea>
<input type=submit" value="寄出"> <input type="reset"  value="取消">
</form>

來賓留言板在瀏覽器顯示情形:


  1. 在原始程式部份

須注意的是在原始程式中的24行及40行
24行 fp = fopen?#93;"/home/class_night/n8215064/www/guestbook.htm","a"); /*?#125;留言檔*/

把創造出來的檔案guestbook.htm必須寫出完整的路徑,如:帳號是 tracy,若想知道完整的路徑,可以在www
目錄中鍵入〝pwd〞的指令,即可得知完整的路徑,如下例:
ind:~\www>pwd
/home/class_night/n8317201/www/

之後再把原始檔案改為fp = fopen("/home/class_night/n8317201/www/guestbook.htm","a")也就是自己的路
徑即可。則來訪者,所留下的name、e-mail、url、suggest即會被加入到www目錄下的guestbook.htm檔案中。
40行printf("<a href=\"/~refined/guestbook.htm\">看看留言版</a>");  /* 更改留言版的入徑 */

把/~refined/guestbook.htm改為自己帳號的入徑,如:帳號是 tracy,則改為/~tracy/guestbook.htm
再來就要compiler程式,看看有沒有錯誤。因本程式是用C語言所寫成,則可以gcc來compiler,便會創造出一
個guestmsg.cgi的檔,再把此檔copy到www/cgi-bin的目錄下,若沒有此目錄可用mkdir創造出來,並更改此檔的
權限為755、即chmod 755 guestmsg.cgi(改為給其他人為可讀可執行)。如此即完成了留言版的製作。
ind:~>mkdir  www/cgi-bin/
ind:~>gcc -o guestmsg.cgi guestmsg.c
ind:~>mv guestmsg.cgi www/cgi-bin/
ind:~>chmod 755 www/cgi-bin/guestmsg.cgi
ind:~>mv addguest.htm www


C、計數器的製作

  1. 修改原始程式檔中記錄檔的絕對路徑、其中有兩行要修改。

fp = fopen?#93;<font color="red">"/home/class_night/n8215064/www/cgi-bin/count.dat","r"</font>);
out = fopen?#93;<font color="red">"/home/class_night/n8215064/www/cgi-bin/count.dat","w"</font>);

若不知自己帳號的絕對路徑,如上可執行pwd來得知。
程式修改後、我們再以gcc把它編訪成可執行檔,並把它搬到www/cgi-bin/的目錄中。
ind:~> gcc -o count.cgi count.c
ind:~> mv count.cgi www/cgi-bin/
ind:~>chmod 755 www/cgi-bin/count.cgi

再來創造個count.dat的記錄檔,因記錄檔是要給使用者可讀、可執行、可寫入,故須把屬性設為777。如以
下方式:
ind:~>cd www/cgi-bin/
ind:~ www/cgi-bin> echo "0" > count.dat
ind:~ www/cgi-bin> chmod 777 count.dat

D、在html部份,如何呼叫CGI??
<img src="http://ind.ntou.edu.tw/cgi-bin/cgiwrap/~username/cgi-files />

來執行cgi的程式。
前一個主題 | 下一個主題 | | | |

討論串




Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|