国立中央大学电算中心陈庆彦ppt课件.ppt

上传人:本田雅阁 文档编号:2323440 上传时间:2019-03-21 格式:PPT 页数:71 大小:1.11MB
返回 下载 相关 举报
国立中央大学电算中心陈庆彦ppt课件.ppt_第1页
第1页 / 共71页
国立中央大学电算中心陈庆彦ppt课件.ppt_第2页
第2页 / 共71页
国立中央大学电算中心陈庆彦ppt课件.ppt_第3页
第3页 / 共71页
亲,该文档总共71页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《国立中央大学电算中心陈庆彦ppt课件.ppt》由会员分享,可在线阅读,更多相关《国立中央大学电算中心陈庆彦ppt课件.ppt(71页珍藏版)》请在三一文库上搜索。

1、2019/3/21,國立中央大學電算中心 陳慶彥,1,CGI程式設計(for UNIX Perl),2019/3/21,國立中央大學電算中心 陳慶彥,2,主題,CGI 及其環境簡介 Perl 程式設計 應用系統實作 公佈欄,2019/3/21,國立中央大學電算中心 陳慶彥,3,CGI 及其環境簡介,Internet,後端 資料庫,CGI程式,前端瀏覽器,2019/3/21,國立中央大學電算中心 陳慶彥,4,CGI 及其環境簡介(cont),為什麼我的 HTML page/form 需要用 script 因為有的時候您需要在 HTML 文件中使用動態資料(非固定不變的資料) CGI 各代表什麼?

2、 Common 向您確保 CGI 可以使用多種程式語言並和多種 不同的系統互動 Gateway 提示您 CGI 的力量不在於它本身所做的事,而 在於它提供了連結其他系統的潛力 Interface 只是表示 CGI 對如何善用其特性提供了明確的 界定換句話說,您可以設計程式來適當利用這 個介面。,2019/3/21,國立中央大學電算中心 陳慶彥,5,CGI 及其環境簡介(cont),CGI程式相關的環境變數,2019/3/21,國立中央大學電算中心 陳慶彥,6,CGI 及其環境簡介(cont),Perl是什麼東西呢? 它是Practical Extraction Report Language等

3、字的縮寫,是一種能掃視任意文字檔,並且能從中取出資訊製成報表的解譯語言(Interpreter)。 Perl的作者Larry Wall說過一句話:Perl是懶人用的工具。如果Perl不是比其它語言更好更簡單更容易上手,恐怕很少人願意去學習新的程式語言。,2019/3/21,國立中央大學電算中心 陳慶彥,7,CGI 及其環境簡介(cont),Perl的特性 Perl有非常傑出的文字處理能力,能輕易地產生HTML文件,尤其它具有完整的Regular Expression語法,使得在C語言看來必需要寫一大串程式碼的功能,Perl幾行就解決了。 Perl是一種直譯式語言,因此可以避免在各種不同系統上,

4、還需要重新編譯的麻煩。 Perl的檢查旗標(-T)可以保護你的Web Server,避免被未經授權的client破壞。,2019/3/21,國立中央大學電算中心 陳慶彥,8,CGI 及其環境簡介(cont),哪些平台上有 Perl?要到哪裡去找?,這套原始碼完全不需任何移植工作便可輕易地在絕大多數的 Unix系統(Perl的原生系統),以及 Plan 9、VMS、QNX、 OS/2 ,和 Amiga上編譯安裝完成。 適合 32 位元的微軟系統和蘋果系統、以執行檔形式發行的 Perl各可在 http:/ http:/www.math.ncu.edu.tw/chenym/perl/,2019/3/

5、21,國立中央大學電算中心 陳慶彥,9,CGI 及其環境簡介(cont),Perl的相關資料要上哪兒找?,man perl perldoc perl http:/ 陳慶彥,10,Perl程式設計-執行環境,server 通常是設定成去執行放在 cgi-bin 目錄底下的 CGI 程式。不過, server 管理者同時也可以在設定檔中設定 aliases,讓所有含某些副檔名(如 .cgi、.pl)的 scripts 都能執行 AllowOverride None Options ExecCGI Options Indexes Includes ExecCGI AllowOverride None

6、 order allow,deny 什麼是檔案使用權限?怎樣改?,2019/3/21,國立中央大學電算中心 陳慶彥,11,Perl程式設計-Lab 1.您的第一個程式,選擇編輯器 vi , joe , ee , pe2或是在client端將編輯好了的檔案上傳到server 您的第一個程式hello.cgi #! /usr/bin/perl print “hello world! n”; Chmod 755 hello.cgi 執行hello.cgi,2019/3/21,國立中央大學電算中心 陳慶彥,12,Perl程式設計-資料型態,Scalar:純量變數是Perl裡最基本的一種資料型態,它可以

7、代表一個字元、字串、整數、甚至浮點數,而Perl把它們都看成是一樣的! Scalar Array:純量陣列,陣列內的每一個元素都是Scalar variable Hash Array(Associative Array):雜湊陣列也叫做相關陣列,它和一般陣列沒什麼不同,差別只是在它的索引值用的是字串,而非一般陣列所用的整數值 References(Pointer):Perl 5新增了參考指標的資料型態使Perl和C一樣可借由指標建立一些複雜的資料結構。,2019/3/21,國立中央大學電算中心 陳慶彥,13,Perl程式設計-資料型態(cont),Scalar:字串運算子,2019/3/21,

8、國立中央大學電算中心 陳慶彥,14,Perl程式設計-資料型態(cont),Scalar:字串運算子,2019/3/21,國立中央大學電算中心 陳慶彥,15,Perl程式設計-資料型態(cont),Scalar:數值運算子,2019/3/21,國立中央大學電算中心 陳慶彥,16,Perl程式設計-資料型態(cont),Scalar:數值運算子,2019/3/21,國立中央大學電算中心 陳慶彥,17,Perl程式設計-資料型態(cont),Scalar:數值運算子,2019/3/21,國立中央大學電算中心 陳慶彥,18,Perl程式設計-資料型態(cont)-Lab 2,Lab2. Stg1.c

9、gi #! /usr/bin/perl $name = “Eric C. Herrmann“; print “The owner of this program is $namen“; $firstName = “Eric “; $middleInitial = “C. “; $lastName = “Herrmann“; print “The owner of this program is $firstName $middleInitial“; print “$lastNamen“; $fName = “Eric“; $mInitial = “C.“; $lName = “Herrmann

10、“; print “The owner of this program is $fName $mInitial $lNamen“;,2019/3/21,國立中央大學電算中心 陳慶彥,19,Perl程式設計-資料型態(cont),2019/3/21,國立中央大學電算中心 陳慶彥,20,Perl程式設計-資料型態(cont)-Lab 3,Lab3. value1.cgi #! /usr/bin/perl $integerValue = 10; $floatingPointValue = 11.43; $scientificValue = 42.03E-04; $nationalDebt = 6_0

11、00_000_000_000; $divisionValue = 23/7; $hexValue = 0x0F3; $octalValue = 037; $itotal = $integerValue + $hexValue; $ftotal = $floatingPointValue + $integerValue; $dtotal = $divisionValue+ $octalValue;,print “Integer t $integerValuen“; print “Floating Point t”; Print “$floatingPointValuen“; print “Sci

12、entific t $scientificValuen“; print “National Debt t $nationalDebtn“; print “Division t $divisionValuen“; print “Hex tt $hexValuen“; print “Octal tt $octalValuen“; print “nn“; print “itotal = $itotaln“; print “ftotal = $ftotaln“; print “dtotal = $dtotaln“;,2019/3/21,國立中央大學電算中心 陳慶彥,21,Perl程式設計-資料型態-L

13、ab 3(cont),2019/3/21,國立中央大學電算中心 陳慶彥,22,Perl程式設計-資料型態(cont),Scalar Array:,純量陣列,陣列內的每一個元素都是Scalar variable。宣告及使用方式如下: # 純量陣列以 開頭。 my array; my array=qw(a b c d); # qw 函數會將其後的每個元素用逗點隔開,效果就像下面這行。 my array=(“a“,“b“,“c“,“d“);,2019/3/21,國立中央大學電算中心 陳慶彥,23,Perl程式設計-資料型態(cont),Scalar Array:,# 當然你也可以一個個元素宣告,下面

14、就是存取每一個元素的方法。 # 因為陣列中的每一個元素都是純量變數,所以要以 $ 開頭, # 剛開始容易搞混,請注意。 $array0=“a“; $array1=“b“; $array2=“c“; $array3=“d“; # 使用for loop印出陣列內每個元素的值。 for($i=0; $i=$#array; $i+) print “$array$in“; ,2019/3/21,國立中央大學電算中心 陳慶彥,24,Perl程式設計-資料型態(cont)-Lab4,Lab 4 scalearray1.cgi #!/usr/bin/perl FamilyName = (“Steven“, “

15、Michael“, “Herrmann“); print $FamilyName0; print $FamilyName1; print $FamilyName2; print “nn“; print “$FamilyName0 $FamilyName1 $FamilyName2n“;,2019/3/21,國立中央大學電算中心 陳慶彥,25,Perl程式設計-資料型態(cont)-Lab5,Lab 5 scalearray2.cgi(Mixed Data Assigned to Array Cells ),#!/usr/bin/perl $cellIndex = 0; $mixedData$c

16、ellIndex = mixedData; $mixedData2 = 876; $mixedData6 = “The last cell“; $mixedData4 = 3.41467; foreach $value (mixedData),print “Cell number $cellIndex = $value n“; $cellIndex+; print “nn“; print “The last cell of the array mixedData is $#mixedData“; print “nn“;,2019/3/21,國立中央大學電算中心 陳慶彥,26,Perl程式設計-

17、 資料型態-Lab5(cont),2019/3/21,國立中央大學電算中心 陳慶彥,27,Perl程式設計-資料型態(cont),Hash Array(Associative Array),# 相關陣列是以 % 符號開頭的。 my %hash; my %hash=(“i1“=“aaa“,“i2“=“bbb“,“i3“=“ccc“); $hashi1=“aaa“; $hashi2=“bbb“; $hashi3=“ccc“;,2019/3/21,國立中央大學電算中心 陳慶彥,28,Perl程式設計-資料型態(cont) -Lab6,#!/usr/bin/perl print “nn“; %pric

18、eList = ( “Hackamore“=28.92, “English Bridle“=36.31, “Western Saddle“=124.00, “Hunt Seat Saddle“=178.01, “Jumping Saddle“=205.87, “Leather Halter“=24.56, );,printAA(%priceList); print “You could print a hash cell like this $priceListWestern Saddlen“; %priceList = ( 1358=28.92, 1359=36.31, 1965=124.0

19、0, 1966=178.01, 1977=205.87, 1357=24.56, );,Lab 6 hasharray.cgi,2019/3/21,國立中央大學電算中心 陳慶彥,29,Perl程式設計-資料型態-Lab6 (cont),print “Or like this $priceList1965 nn“; printAA(%priceList); sub printAA my %myPriceList = _; foreach $key (keys(%myPriceList) print “The price of item $key is $priceList$keyn“; prin

20、t “nn“; ,Lab 6 hasharray.cgi (cont),2019/3/21,國立中央大學電算中心 陳慶彥,30,Perl程式設計-資料型態-Lab6 (cont),2019/3/21,國立中央大學電算中心 陳慶彥,31,Perl程式設計-資料型態(cont),References(Pointer),如何取得變數的位址? $scalarRef=$scalarVar; $arrayRef=arrayVar; $hashRef=%hashVar; $funcRef=,2019/3/21,國立中央大學電算中心 陳慶彥,32,Perl程式設計-資料型態(cont),References(

21、Pointer),如何使用指標? print $scalarRef; print “$arrayRef“; print $hashRef-$key; ,2019/3/21,國立中央大學電算中心 陳慶彥,33,Perl程式設計-資料型態(cont)-Lab7,#! /usr/bin/perl $hashRef=a=aa,b=bb,c=cc; print “$hashRef-at$hashRef-bt$hashRef-cn“; my %hashRef1=(a=aa,b=bb,c=cc); print “ $hashRef1at $hashRef1bt $hashRef1cn“;,Lab 7 poi

22、nter.cgi,2019/3/21,國立中央大學電算中心 陳慶彥,34,Perl程式設計-控制敘述,條件控制敘述 (Conditional Control Statements),if (Expression) Code Segment if (Expression) Code Segment else Code Segment statement if (Expression); statement unless (Expression);,2019/3/21,國立中央大學電算中心 陳慶彥,35,Perl程式設計-迴圈控制敘述,迴圈控制敘述 (Loop Control Statements

23、),for($i=0; $i=10; $i+) Code Segment foreach $i (array) Code Segment for $i (010) Code Segment while($i=10) Code Segment do Code Segment while(Expression);,2019/3/21,國立中央大學電算中心 陳慶彥,36,Perl程式設計-控制敘述-Lab8,#! /usr/bin/perl my custom; $custom0=張三; $custom1=李四; $custom2=王五; for ($i=0; $i=$#custom; $i+) i

24、f ( $custom$i eq 李四) print “我是李四n“; ,$cnt=0; while ($cnt=$#custom) print “我是$custom$cntt“; $cnt+; print “n”; # 第一個引數是純量變數,第二個引數要用#括號括起來,裡面是一個純量陣列, 顧名#思義它就是把陣列中的每個元素依序傳給#第一個引數,直到全部傳完。 foreach $i (custom) print “我是$it“; ,Lab 8 if.cgi,2019/3/21,國立中央大學電算中心 陳慶彥,37,Syntax: sub NAME Code 呼叫副程式: &NAME(para1

25、, para2,.) 參數傳遞: _,Perl程式設計-副程式(Subroutines),2019/3/21,國立中央大學電算中心 陳慶彥,38,Perl程式設計-副程式(Subroutines),2019/3/21,國立中央大學電算中心 陳慶彥,39,Syntax: open(FILEHANDLE,“Expression“); 可以開啟一個以 string 指定檔名的檔案, 並傳回檔案代碼給 filehead 這個函式,如果執行程功的話, 會傳回true, 否則就傳回 undef. 如果開頭字元為 ,就會以寫入模式開啟 如果開頭字元是以 ,就會以新增模式開啟 如果開頭字元為 + (例: +

26、, + ) 開啟的檔案會可讀又可寫 close(FILEHANDLE);,Perl程式設計-I/O和檔案處理,2019/3/21,國立中央大學電算中心 陳慶彥,40,Perl程式設計-I/O和檔案處理-Lab9,#! /usr/bin/perl $FileName=“test.txt“; open(WFILE, “$FileName“); print WFILE “123n“; print WFILE “456n“; print WFILE “789n“; close(WFILE); #讀取test.txt內容$FileName=“test.txt“; my MyDept;,open (FIL

27、E,“$FileName“) | die $!; LINES=; close(FILE); $SIZE=LINES; for ($i=0;$i$SIZE;$i+) $MyDept$i=$LINES$i; print “$MyDept$i“; ,Lab 9 file.cgi,2019/3/21,國立中央大學電算中心 陳慶彥,41,Perl程式設計-控制字元,2019/3/21,國立中央大學電算中心 陳慶彥,42,Regular Expression通常是用來尋找特定的字串樣式(pattern),也就是所謂格式辨認(pattern-matching)的功能。它的運算子是=和!,可以把它念做matc

28、h和not match。 Syntax: $string = /regular expression/expression modifier 例:$sentence = /Hello/,Perl程式設計-Regular Expressions,2019/3/21,國立中央大學電算中心 陳慶彥,43,Perl程式設計- -Regular Expressions,Modifiers:修飾選項可有可無,它是用來對整個敘述作修正的。,2019/3/21,國立中央大學電算中心 陳慶彥,44,Perl程式設計- -Regular Expressions,Metacharacter:下面這些字元都具有特殊意

29、義,可以讓你建立更複雜的 搜尋樣式(searching pattern)。,2019/3/21,國立中央大學電算中心 陳慶彥,45,Perl程式設計- -Regular Expressions,Pattern Quantifier:用來表示字元的數量關係。,2019/3/21,國立中央大學電算中心 陳慶彥,46,Perl程式設計- -Regular Expressions,Character Patterns:下列的sequence用來match一些特定格式的字元,2019/3/21,國立中央大學電算中心 陳慶彥,47,/abc/ 找到含有abc的字串 /abc/ 找到開頭是abc的字串 /a

30、bc$/ 找到結尾是abc的字串 /a|b/ 找到有a或b的字串,也可以用來找整個字(word),Perl程式設計-Regular Expressions-Exam.,2019/3/21,國立中央大學電算中心 陳慶彥,48,/ab2,4c/ 找到a後面跟著2-4個b,再跟著c的字串,若只有/ab2,c/則會找二個以上的b /ab*c/ 找到a後面跟著0個或多個b,再跟著c的字串,如同/ab0,c/ /ab+c/ 找到a後面跟著一個以上的b,再跟著c的字串,如同/ab1,c/,Perl程式設計-Regular Expressions(cont),2019/3/21,國立中央大學電算中心 陳慶彥,

31、49,/a.c/ .可以代表任何字元,除了new line字元(n)外。 /abc/ 找到含有這三個字元中任何一個的字串 /d/ 找到含有數字的字串,如同/0-9/ /w/ 找到含有字母的字串,如同/a-zA-Z0-9_/,Perl程式設計-Regular Expressions(cont),2019/3/21,國立中央大學電算中心 陳慶彥,50,/s/ 找到含有white space的字串,如同/ trnf/ /abc/ 找到沒有abc任一字元的字串 /*/ 找到含有字元*的字串,在反斜線“後面的字元Perl會把它當作普通字元看待。若你不確定這個符號是否為特殊字元,乾脆全加上以策安全。 /a

32、bc/i 忽略abc的大小寫,Perl程式設計-Regular Expressions(cont),2019/3/21,國立中央大學電算中心 陳慶彥,51,/(d+).(d+).(d+).(d+)/ 找到類似IP的字串,並將IP的四個數字分別存在$1,$2,$3,$4四個特殊變數中,以便在其後加以利用。 例: if ($x = /(d+.d+).d+.d+/) print “中央大學“ if ($1 eq “140.115“); $x = s/s+/g 把所有的white space全部去除掉 $x = s/( *):*( *)/$2:$1/ 把用“:“分開的兩個欄位互相對調,Perl程式設計

33、-Regular Expressions(cont),2019/3/21,國立中央大學電算中心 陳慶彥,52,$x = tr/this/that/ 把“this“替換成“that“ $x = tr/a-z/A-Z/ 把小寫字母全部替換成大寫字母 $count = $x = tr/*/*/ 計算$x中有幾個“*“,Perl程式設計-Regular Expressions(cont),2019/3/21,國立中央大學電算中心 陳慶彥,53,Perl程式設計-Regular Expressions-Lab10,#! /usr/bin/perl $url=“http:/ccy.dd.ncu.edu.t

34、w:8080/cgi-bin/news.cgi“; ($host, $port, $file)=($url=m|http:/(/:+):0,1(d*)(S*)$|); print “處理的字串:$urln“; print “處理後的主機名稱:$hostn“; print “處理後的主機port:$portn“; print “處理後的檔名:$filen“;,Lab 10 regular1.cgi,2019/3/21,國立中央大學電算中心 陳慶彥,54,Perl程式設計-Regular Expressions-Lab10,$url=m| m命令可以讓你自訂pattern的分隔符號,m後面跟著的就

35、是分隔符號,| |是在字串中尋找多個pattern。 (/:+) match一個字串,裡面沒有/和:字元。找到的字串存在$1中。 :0,1(d*) match 0或1個:,後面跟著一串數字或nothing。找到的字串存在$2中,若找不到,$2就是空的。 (S*)$ match一串非空白字元,並以找到的字串為結尾。找到的字串存在$3中。,2019/3/21,國立中央大學電算中心 陳慶彥,55,Perl程式設計-Regular Expressions-Lab10,(S*)$ match一串非空白字元,並以找到的字串為結尾。找到的字串存在$3中。 ()=() ($host, $port, $file

36、)=($1, $2, $3) 即$host=“my.machine.tw“ $port=8080 $file=“/cgi-bin/test.pl“,2019/3/21,國立中央大學電算中心 陳慶彥,56,Perl程式設計-利用Perl撰寫CGI程式,HTTP headers(表頭) HTTP通訊協定是一種很簡單的client-server通訊協定,client和server之間的溝通由兩部分所組成,一是HTTP headers,另一就是文件或資料本身了,中間則以一個空白行隔開。,2019/3/21,國立中央大學電算中心 陳慶彥,57,Perl程式設計-利用Perl撰寫CGI程式,由於瀏覽器和H

37、TTP server都有很多不同的版本,所使用的HTTP headers也各不相同,常用的HTTP headers有下列幾種:,2019/3/21,國立中央大學電算中心 陳慶彥,58,Perl程式設計-利用Perl撰寫CGI程式,這是一個由Netscape Navigator 3.0版所發出的request: GET / HTTP/1.0 Connection: Keep-Alive User-Agent: Mozilla/3.0 (WinNT; I) Host: ind.ntou.edu.tw Accept: image/gif, image/x-xbitmap, image/jpeg, *

38、/*,2019/3/21,國立中央大學電算中心 陳慶彥,59,Perl程式設計-利用Perl撰寫CGI程式,HTTP/1.1 200 OK Date: Sat, 06 Sep 1997 03:32:12 GMT Server: Apache/1.2b11 Last-Modified: Mon, 16 Jun 1997 14:03:10 GMT ETag: “b5496-ab0-33a5479e“ Content-Length: 2736 Accept-Ranges: bytes Keep-Alive: timeout=15, max=100 Connection: Keep-Alive Con

39、tent-Type: text/html Welcome to NTOU CC Email/WWW Server ,而ind的apache HTTP server的回應則是:,2019/3/21,國立中央大學電算中心 陳慶彥,60,Perl程式設計-利用Perl撰寫CGI程式,輸出網頁內容的步驟 先輸出 “Content-type: text/htmlnn“ 再輸出網頁的內容,2019/3/21,國立中央大學電算中心 陳慶彥,61,Perl程式設計-利用Perl撰寫CGI程式-Lab11,#! /usr/bin/perl PrintHeader(); print “; PrintENV();

40、print “; sub PrintHeader print “Content-type: text/htmlnn“; ,sub PrintENV my $key; foreach $key (sort keys %ENV) print “$key = $ENV$keyn“; ,2019/3/21,國立中央大學電算中心 陳慶彥,62,Perl程式設計-利用Perl撰寫CGI程式-Lab11,2019/3/21,國立中央大學電算中心 陳慶彥,63,應用系統實作 公佈欄,2019/3/21,國立中央大學電算中心 陳慶彥,64,應用系統實作公佈欄-系統架構,2019/3/21,國立中央大學電算中心

41、陳慶彥,65,應用系統實作公佈欄-系統架構,執行News.cgi,ReadPara();,ReadDept();,ReadUser();,輸入“”,輸入“系統管理”,輸入“帳號管理”,輸入“張貼公告”,ReadNews();,SystemConfigForm();,AddUserForm();,PostNewsForm();,2019/3/21,國立中央大學電算中心 陳慶彥,66,應用系統實作公佈欄(cont),CGI 功 能 說 明 CGI 是 Common Gateway Interface 的 簡 稱. 其 主 要 的 功 能 是 在 WWW 環 境 下, 藉 由 從 使 用 者 端傳

42、遞 一 些 訊 息 給 WWW 伺 服 軟 體, 再 由 WWW 伺 服 軟 體去 啟 動 所 指 定 的 程 式 碼 來 完 成特 定 的 工 作. 所 以 更 明 確 的 說, CGI 僅 是 在 WWW 主 機 端 上 的 可 執 行 的 程 式 碼.,2019/3/21,國立中央大學電算中心 陳慶彥,67,應用系統實作公佈欄-資料傳遞,2019/3/21,國立中央大學電算中心 陳慶彥,68,應用系統實作公佈欄-Client傳送data,# 副程式: 系統登入 sub Login print_top(); print “; print “; 帳號:”; 密碼:“; print “”; p

43、rint “; print “; Print “;print_bottom(); ,2019/3/21,國立中央大學電算中心 陳慶彥,69,應用系統實作公佈欄-Server端接收data,ReadForm(*FORM); Print “$FORMlogin_name”; Print “$FORMlogin_password”; sub ReadForm local (*in) = _ if _; local ($i, $key, $val); # Read in text if ($ENVREQUEST_METHOD eq “GET“) $in = $ENVQUERY_STRING; elsif ($ENVREQUEST_METHOD eq “POST“) read(STDIN,$in,$ENVCONTENT_LENGTH); if ($ENVQUERY_STRING = /=/) $in = join(“ ,in = split(/ ,2019/3/21,國立中央大學電算中心 陳慶彥,70,應用系統實作-公佈欄,程式碼講解(請參考附件),2019/3/21,國立中央大學電算中心 陳慶彥,71,測驗-檔名(exam.cgi),請利用perl設計一個可供使用者登入資料與顯示資料的CGI程式,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1