1. Trang chủ
  2. » Luận Văn - Báo Cáo

Lập trình CGI bằng Perl trên Linux

60 1,4K 8
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Lập trình cgi bằng perl trên linux
Tác giả Nguyễn Hoàng Việt
Người hướng dẫn Thầy Đặng Bá L, Thầy Nguyễn Tấn Khôi, Thầy Võ Ngọc Anh
Trường học Đại học Kỹ thuật
Chuyên ngành Công nghệ thông tin-Điện tử viễn thông
Thể loại Đồ án
Năm xuất bản 2000
Thành phố Đà Nẵng
Định dạng
Số trang 60
Dung lượng 774,5 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nghiên cứu lập trình với ngôn ngữ Perl. Khái niệm về biến, mảng . . . trong Perl được đưa ra xem xét ở đâ

Trang 1

Lời cảm ơn

Lời đầu tiên, tôi xin bày tỏ lòng biết ơn các thầy, các cô Khoacông nghệ thông tin cùng toàn thể các thầy giáo, cô giáo trờng Đạihọc kỹ thuật, những ngời đã trao cho tôi nhiều kiến thức quý báu đểtôi có đợc ngày hôm nay

Xin trân thành cảm ơn thầy Đặng Bá L, thầy Nguyễn Tấn Khôinhững ngời đã trực tiếp hớng dẫn tôi trong suốt thời gian làm đồ án

Đặc biệt xin chân thành cảm ơn các thầy Võ Ngọc Anh, thầy NguyễnTấn Khôi, những ngời đã cho tôi những ý tởng mang tính chiến lợc đểtôi có thể hoàn thành đồ án này

Xin đợc gửi lời cảm ơn bạn bè, những ngời đã giúp đỡ, động viêntôi về tinh thần cũng nh vật chất trong xuốt thời gian qua

Cuối cùng, tôi xin bày tỏ lòng biết ơn gia đình, cha mẹ, anh chị,những ngời đã nuôi nấng, dạy dỗ tôi để tôi có đợc nh ngày hôm nay

Đà Nẵng Ngày 20 Tháng 6 năm 2000 Sinh viên thực hiện

Nguyễn Hoàng Việt

Tóm tắt nội dung đồ án

Đồ án này đợc chia làm 6 chơng:

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 2

- Chơng I: Tổng quan về đề tài, giới thiệu các vấn đề sẽ đa ra nghiên cứu trong đềtài Giới thiệu hệ điều hành Linux, công nghệ CGI ứng dung trên Linux, và ngôn ngữPerl cùng với bài toán sẽ đa ra giải quyết.

- Chơng II: Công nghệ CGI: gồm khái niệm, các thành phần của CGI và cách thứclập trình với CGI trong môi trờng Linux Trong chơng này có đa ra một số ví dụ về cácCGI scrips đợc viết bằng ngôn ngữ Perl và C để làm nổi bật tính không phụ thuộc ngônngữ lập trình của CGI

- Chơng III: Nghiên cứu lập trình với ngôn ngữ Perl Khái niệm về biến, mảng trong Perl đợc đa ra xem xét ở đây Đặc biệt là mảng liên hợp (assosiative array - hash )

và một số hàm chuển của Perl trong thao tác với mảng liên hợp

- Chơng IV: Phân tích bài toán quản lý sinh viên tại trờng Đậi học kỹ thuật Đà nẵng.Khảo sát các thành phần của hệ thống, các nguyên tắc quản lý, các đối tợng khai thác

hệ thống Mô hình hoá và giải quyết bài toán bằng ngôn ngữ Perl theo công nghệ CGItrên môi trờng Linux

- Chơng V: Kết quả thực hiện chơng trình

- Chơng VI: Kết luận, nêu những kết quả đạt đợc về lý thuyết, thực tiễn, những hạnchế, tính khả thi và hớng phát triển của đề tài

Trang 3

mục lục

mục lục 3

Tổng quan về đề tài 5

I Tình hình sử dụng Linux 5

II CGI và Linux 6

III Ngôn ngữ Perl 6

IV Mục tiêu đồ án 6

CGI 7

I Tổng quan về CGI 7

I.1 CGI là gì ? 9

I.1.1 Khái niệm Gateway 9

I.1.2 Common Gateway Interface 10

I.2 Tại sao dùng CGI ? 11

II Lập trình với CGI 12

II.1 Lựa chọn ngôn ngữ 12

II.1.1 C/C++(Unix, Linux, Windows, Macintosh) 12

II.1.2 Perl (Unix, Linux, Windows, Macintosh) 13

II.1.3 Visual Basic (chỉ dùng trên môi trờng Windows) 13

II.2 Những vấn đề cơ bản trong lập trình CGI 13

II.2.1 Chơng trình ví dụ 13

II.2.2 Outputting CGI 15

II.2.2 Sơ lợc về HTML Forms 17

II.2.2.1 Thẻ FORM 19

II.2.2.2 Trờng text và Password 19

II.2.2.3 Nút Reset và Submit 19

II.2.2.4 Tham chiếu một số tags 19

II.2.3 Input CGI 20

Tóm lại 27

III Cài đặt và chạy chơng trình CGI 28

III.1 Cấu hình Server để chạy CGI 28

III.2 Cài đặt CGI trên server UNIX 29

III.3 Chạy chơng trình CGI 30

Ngôn ngữ Perl 31

I Giới thiệu 31

II Biến trong Perl 32

II.1 Biến vô hớng(Scalar variables) 33

II.2 Khối lệnh và các cấu trúc điều khiển 33

II.3 Phạm vi của biến 35

II.4 Luật trích dẫn 36

III Mảng và mảng liên hợp 38

III.1 Mảng 38

III.2 Mảng liên hợp ( associative array - hashes ) 41

Phân tích và thiết kế hệ thống 43

I Đặt vấn đề 43

I.1 Dẫn nhập 43

I.2 Yêu cầu 43

I.3 Các đối tợng khai thác hệ thống 44

I.3.1 Phòng đào tạo và công tác chính trị 44

I.3.2 Các vị giáo vụ khoa 44

I.3.3 Sinh viên, gia đình sinh viên ( ngời dùng trên mạng) 44

I.3.4 Những thuận lợi và khó khăn 44

a) Thuận lợi 44

b) Khó khăn 44

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 4

II Phân tích hệ thống 45

II.1 Khảo sát hệ thống 45

II.2 Sơ đồ dòng dữ liệu 46

II.3 Từ điển dữ liệu 49

II.4 Mô hình thực thể kết hợp 51

II.5 Mô hình nhị nguyên 52

III Xây dựng chơng trình 53

III.1 Chọn công cụ 53

III.2 Xây dựng mô hình Logic dữ liệu 54

III.3 Các thủ tục xử lý trong chơng trình 54

1 Module nhập danh sách lớp mới ( nhapds.cgi ) 54

2 Module tìm kiếm sinh viên ( timkiem.cgi ) 54

3 Module xem danh sách ( xem_danh_sach1.cgi ) 55

4 Module xem điểm ( xem_diem.cgi ) 55

kết quả thực hiện chơng trình 56

I Xây dựng môi trờng hệ thống 56

II Chạy chơng trình 56

Kết luận 60

I Những kết quả đạt đợc 60

I.1 Lý thuyết 60

I.2 Thực tiễn 60

II Tính khả thi 60

III Hạn chế 61

IV Hớng phát triển 61

Tài liệu tham khảo 62

Phụ lục 63

I Module nhapds.cgi 63

II Module xemdanhsach.cgi 65

III Module xemdiem.cgi 67

IV Module timkiem.cgi 69

Chơng I

Tổng quan về đề tài

I Tình hình sử dụng Linux

Linux đợc xem là một hiện tợng trong lĩnh vực hệ điều hành vài năm gần đây Báo chí, các diễn đàn, các phòng nói chuyên trực tuyến trên mạng, chơng trình "Tìm kiếm

t-ơng lai" của VTV3 Đài truyền hình Việt nam Thậm chí cả cht-ơng trình "Khoa học vui" cho trẻ em của VTV1 cũng đều đã có bài đăng tải về Linux

Vậy thì Linux là gì vậy ? Linux là một hệ điều hành giống nh bao hệ điều hành khác Nhng nó có nhiều tính năng mạnh mà không có ở một số hệ khác Chúng ta, chắc

ai cũng đã biết về một hệ điều hành tiền bối - UNIX Khác với các hệ điều hành của Microsoft, UNIX không rễ sử dụng với những ngời mới làm quen, không đợc thân thiện cho lắm, nhng bù vào đó Unix là một hệ điều hành đa nhiệm thực sự, đợc viết ra để hỗ trợ cho nhiều ngời sử dụng, nó tận dụng đợc tối đa nguồn lực khần cứng của máy tính chính vì vậy Unix có thể chạy tốt trên một số máy tính với cấu hình rất hạn chế Khả năng kết nối và điều hành mạng rất tốt, có thể đóng vai trò phục vụ trong hầu hết các

Trang 5

ứng dụng Internet hiện nay Unix là một môi trờng lập trình lý tởng cho các nhà lậptrình viên chuyên nghiệp

Linux mang dòng máu của Unix, đợc phát triển bởi Sun MicroSystem Linux có đầy

đủ các tính năng vốn có của Unix và Linux đã thân thiện và dễ sử dụng hơn thông qua

hệ thống X-Window ở các nớc Châu Âu, đặc biệt là Pháp, Linux đợc đặc biệt yêu mến

và sử dụng rộng rãi Điều này cũng dễ giải thích do những tính năng tiến bộ của Linux:tính bảo mật cao, hệ thống kết nối mở, tích hợp nhiều công nghệ mới, nhiều ngôn ngữlập trình đợc bao hàm trong hệ thống

ở nớc ta, Linux đợc biết đến trong vòng khoảng 3 năm trở lại đây Chúng ta đã biết,máy tính đợc sử dụng thực sự rộng rãi ở nớc ta trong khoảng 10 năm nay, thời điểm màcác hệ điều hành của Microsoft đang thống trị - DOS, Windows 3.x Theo truyền thốngthì việc thay đổi một hệ điều hành là chuyện tơng đối khó ở nớc ta, phải đào tạo lại lớpngời sử dụng, phải thay đổi hệ thống phần mềm Hơn nữa Linux không phải dễ sửdụng cũng nh quảnt rị hệ thống Chính vì vậy, hiện nay ở nớc ta Linux chỉ đợc sử dụng

ở trong các môi trờng xí nghiệp mang tính chuyên môn cao, còn với ngời dùng máy

tính PC thì Linux mới chỉ mang tính khái niệm, "có biết nhng cha dùng".

II CGI và Linux

Sự phát triển của Internet đã giúp chúng ta gần nhau hơn trong mọi lĩnh vực, bất kểkhoảng cách và ngày đêm Nhng những Web server trên Internet đa số chỉ phục vụ cácdịch vụ mang tính truyền thông ở mức vĩ mô Các ứng dụng để khai thác cơ sở dữ liệu

để phục vụ trong các bài toán quản lý, quảng cáo, diễn đàn, nói chuyện trực tuyến trênmạng, các dịch vụ tìm kiếm nhanh đều đòi hỏi ngời dùng phải viết chơng trình.CGI (Common Gateway Interface) là một công nghệ giúp mở rộng khả năng củaWeb server để giải quyết các bài toán mang tính đặc thù và có thể vận hành trên mạng.Việc chọn ngôn ngữ cho lập trình CGI ít bị hạn chế do tính mềm dẻo của nó và chỉ cầntuân thủ vài nguyên tắc, chúng ta có thể viết một chơng trình CGI

Chúng ta có thể sử dụng công nghệ CGI để áp dụng cho lập trình trong mọi hệ điềuhành, miễn là hệ điều hành đó có thể kết nối mạng và có một phần mềm Web serverchạy trên đó Linux là một hệ điều hành mạng, có thể đóng vai trò phục vụ trong nhiềudịch vụ đang có hiện nay (WWW, FTP, Telnet, Wais .) Hơn nữa, Linux cung cấpmột Web server nổi tiếng mang tên Apache Server, phiên bản mới nhất 1.1.5 Webserver này hỗ trợ lập trình CGI rất mạnh

III Ngôn ngữ Perl

Perl (Practical Extraction and Reporting Language) có nhiều u điểm của một ngônngữ lập trình có cấu trúc giống nh C , Pascal Song trên thực tế Perl là một ngôn ngữdiễn dịch (Interpreted language) có nhiều u điểm trong lập trình CGI Thao tác xử lýchuỗi mạnh, có khả năng làm việc tốt với các biến môi trờng, dễ lập trình, dễ gỡ rối Hơn nữa Perl đợc tích hợp bên trong Linux

IV Mục tiêu đồ án

Cùng với sự gợi ý của giáo viên hớng dẫn và nhận thức của bản thân về khả năng vàtầm quan trọng của các lĩnh vực đã trình bày ở trên, tôi quyết định chọn h ớng nghiêncứu cho đồ án tốt nghiệp nh sau:

- Hiện thực và cài đặt hệ điều hành Linux

- Nghiên cứu công nghệ CGI

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 6

- Lập trình CGI với ngôn ngữ Perl

Cuối cùng để minh họa cho kết quả nghiên cứu, tôi chọn và giải quyết bài toán:

"Quản lý điểm sinh viên trờng Đại học kỹ thuật Đà Nẵng" với ý tởng nh sau:

- Giúp phòng đào tạo quản lý điểm sinh viên của trờng Đại học kỹ thuật

- Giúp cha mẹ sinh viên có thể biết đợc những thông tin về con mình kỳ nào, họcmôn gì, mấy điểm thông qua mạng Internet Góp phần gắn kết mối liên lạc giữa gia

dễ dàng tìm kiếm Chắc hẳn trong chúng ta ai cũng đã biết về Web và bạn cũng nh tôi

có thể đã hơn một lần truy cập vào các site của ngời khác nên giờ đây chúng ta có thểnhận ra rằng những từ viết tắt thoạt nhìn có vẻ đáng ngại nh “HTTP”, “HTML” đơngiản chỉ là những mẫu tự viết tắt của Web hoặc là một phơng thức truyền thông nào đótrên Web

Web đã đợc thừa nhận là phơng tiện thông tin lý tởng qua sự phổ biến rộng rãi trêntoàn cầu và sự không ngừng lớn mạnh của nó Mặc dù đã có một số ý kiến thắc mắc vềnhững tiện ích và những thuộc tính của Web và cũng có một số ý kiến cho rằng việcWeb lớn mạnh và trở nên phổ biến nh vậy chủ yếu nhờ vào sự phát triển của các phơng

tiện "siêu truyền thông" (media hyper), nhng không thể nghi ngờ gì nữa-Web rõ ràng là

một phơng tiện quan trọng trong việc truyền thông tin các loại Không chỉ các loại dịch

vụ thông tin “ tức thời” ( nh tin tức, tin thời tiết, thể thao ) các tài liệu tham khảo cósẵn đợc điện tử hoá mà cả một khối lợng khổng lồ các loại dữ liệu khác cũng tồn tạitrong Web Web thực sự đã trở thành một công cụ hữu dụng về thông tin đại chúng chohàng vạn thậm chí hàng triệu ngời trên khắp thế giới

Tại sao Web lại trở nên duy nhất và đáng giá nh vậy ? Trớc hết, Web là một giaodiện siêu truyền thông cho các loại dữ liệu Hãy xét việc lu trữ thông tin trên một ổ đĩacứng trong một máy tính PC Rõ ràng là dữ liệu đợc lu trữ và truyền đạt một cách tuyếntính giống nh một hệ thống hồ sơ vậy Ví dụ nh chúng ta có một hệ thống các th mục,trong mỗi th mục chứa các tài liệu hoặc các th mục con (Xem hình 1.1) Web sử dụngmột dạng khác biệt để truyền thông tin - đợc gọi là “siêu truyền thông” Một giao diện

siêu văn bản bao gồm một tài liệu và các links Links là các từ mà chúng ta có thể kích

chuột vào để xem các thông tin khác (Xem hình 1.2) Web mở rộng khái niệm “siêuvăn bản” Nó bao gồm các loại thông tin khác nữa nh các bảng biểu, âm thanh, hình

ảnh, video

Trang 7

Hầu hết mọi ngời đều cảm thấy tiện lợi khi sử dụng kiểu truyền và phân bổ thôngtin dễ dàng và duy nhất này Từ các vị giáo s ở các trờng đại học muốn truyền dữ liệu

đến các đồng nghiệp cho đến các thơng gia – những ngời muốn cung cấp thông tin vềcông ty của mình cho những ai muốn biết Tuy nhiên, trong nhiều năm qua mọi ngời đãnhận ra rằng việc nhận thông tin cũng quan trọng không kém việc truyền thông tinMặc dù Web cung cấp cho chúng ta một giao diện siêu truyền thông duy nhất, nhngngoài Web ra còn có nhiều phơng thức khác mà hiệu quả cũng không kém Đó là cácdịch vụ mạng nh File Transfer Protocol (FTP) và Gopher – xuất hiện khá lâu trớcWeb Th điện tử là phơng tiện truyền thông đầu tiên trong việc liên lạc và trao đổi thôngtin trên mạng Internet và hầu hết các mạng khác từ khi chúng xuất hiện Tại sao Webtrở nên phổ biến nh vậy ? Rõ ràng là tính năng siêu truyền thông của Web đã tạo nên sựthành công lớn lao ấy, nhng để làm cho Web trở nên có hiệu quả ta phải chú ý đến tínhnăng tơng tác của nó

Nếu không có khả năng nhận thông tin đầu vào từ ngời sử dụng cũng nh khả năngcung cấp thông tin thì Web chỉ là một phơng tiện truyền thông hoàn toàn tĩnh Ngời sửdụng có thể tự do truy cập dữ liệu mà không phải phụ thuộc vào cấu trúc " cứng nhắc"

Trang 8

browses Khi Web browse yêu cầu truy cập một địa chỉ Web đã cho sẵn, việc đầu tiên

là Web browse liên lạc với máy tính mang địa chỉ kia trên Internet, rồi gửi yêu cầu đếnphần mềm chạy trong máy chủ Phần mền này sẽ chạy tức thì và tơng ứng với mỗi yêucầu nó sẽ gởi những trả lời thích hợp

Mặc dù các Web Server có thể truyền và nhận dữ liệu nhng chức năng của nó cũnghạn chế Server thờng không hiểu các thông tin đầu vào bổ sung và nó thờng bỏ qua cácthông tin này, trừ khi các nhà thiết kế ra nó đã cài đặt sẵn chơng trình để xử lý đối vớicác thông tin này Để Server có thể giải quyết đợc nhiều thông tin cao cấp hơn là việcchỉ đơn thuần nhận và gửi các file đến các browse, chúng ta phải biết cách mở rộngchức năng của Web Server Ví dụ, Web server không thể tìm ra cơ sở dữ liệu trên cơ sởmột từ khoá mà ngời sử dụng nhập vào, nó chỉ có thể có đợc khả năng đó khi chúng talập trình cho nó

I.1 CGI là gì ?

I.1.1 Khái niệm Gateway

Các Web browser có thể truy cập trực tiếp đợc rất nhiều kiểu thông tin và dịc vụthông tin nhng không có nghĩa là tất cả Chẳng hạn nh Archie và Finger là hai dịch vụkhông đợc hỗ trự trên môi trờng Web, hơn thế nữa không phải tất cả các nguồn thôngtin đều tích hợp với Web, ví dụ nh các tài liệu động hoặc các cơ sở dữ liệu Để giảiquyết nhợc điểm này, hầu hết các Web server đều cung cấp phơng thức để tạo ra cáctrang Web động theo yêu cầu của ngời sử dụng thông qua các cổng giao tiếp (gateway).Các gateway giải quyết các vấn đề này bằng cách cung cấp một cơ cấu mở cho Webserver Một gateway có thể truy nhập đợc các nguồn thông tin không theo dạng chuẩncủa Web (HTML), hoặc là các thông tin nằm bên ngoài Web server Trên thực tế mộtgateway đơn giản chỉ là một kịch bản (Script) đợc ngời lập trình tạo ra, thực chất là mộtchơng trình đợc gọi thực hiện bởi Web server khi cần thiết Thông thờng chúng đợc lutrữ tại một th mục đặc biệt và vị trí của th mục này đợc Web server biết đến và quản lý.Các gateway này phải có thuộc tính khả thi, và tuỳ theo từng hệ điều hành mà thuộctính này có thể khác nhau Chẳng hạn, dới Windows thì chúng phải đợc biết đến nh làcác file “ COM”, “ EXE” hay “ BAT”; hoặc trong UNIX hay LINUX thì cờ khả thi

đối với file đó phải đợc thiết lập

Mỗi khi Web server gọi một URL mà trỏ đến một kịch bản gateway, thì kịch bản đólập tức đợc thực hiện Sau đó, Web server sẽ đợi kịch bản kết thúc và lấy các kết quả trả

về cho ngời sử dụng Các gateway có thể lấy các thông tin đầu vào từ ngời sử dụng vàtrả về các tài liệu dới dạng các form HTML, các URL khác hay là các dạng dữ liệukhác

I.1.2 Common Gateway Interface

CGI là thuật ngữ viết tắt của cụm từ Common Gateway Interface, là một giao diệnchuẩn dùng để trao đổi thông tin giữa các gateway và Web server Các ch ơng trình CGIcho phép quản trị hệ thống tạo ra nhiều ứng dụng tinh vi nhằm chuyên môn hoá và tự

động hoá rất nhiều tác vụ cho ngời dùng: những tiện ích cho phép tìm kiếm CSDL vềthông tin đặc biệt, những tiện ích tìm kiếm theo chỉ mục trên mạng mà chắc chúng ta aicũng đã có lần đợc thởng thức

CGI là một phần của Web Server, có thể giao tiếp với những chơng trình khác chạytrên Server Với CGI, Web Server có thể gọi một chơng trình, trong khi dữ liệu của ngời

sử dụng gởi đến chơng trình Chơng trình sau đó xử lý dữ liệu và Server gởi trả lời củachơng trình về cho Web Browser

Trang 9

CGI chỉ là chơng trình với những kiểu đầu vào và vài nguyên tắc nghiêm ngặt trên

đầu ra chơng trình Mọi thứ ở giữa chỉ là chơng trình Dĩ nhiên, có những kỹ thuật dànhriêng đặc biệt cho CGI

Đến đây chúng ta có thể trả lời cho câu hỏi đợc đặt ra ở đầu mục này “CGI là gì ? ”.

CGI là một giao diện giữa các kịch bản do ngời lập trình tạo ra và Web server, giúpchúng ta mở rộng khả năng của Server Về mặt lý thuyết CGI giúp chúng ta mở rộngkhả năng của Server trong việc nhận và phân tích thông tin đầu vào từ phía ngời sử dụng

và trên cơ sở các thông tin đầu vào đó sử lý và kết xuất một dầu ra thích hợp Chúng tahãy xem hình vẽ minh hoạ sau :

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Server machine

Client

machine

1 Browser gửi Form yêu cầu, cùng các thông tin về ch ơng trình CGI

2 Server gọi ch ơng trình CGI theo yêu cầu của Browser

3 Kết quả từ ch ơng trình CGI trả về cho Server

4 Server đem kết quả nhận đ ợc từ CGI trả lời cho Browser

Trang 10

I.2 Tại sao dùng CGI ?

Thông thờng, nếu chúng ta muốn mở rộng khả năng của Web server, chính chúng taphải sửa đổi Web server đó Đây thực là cách giải quyết bất lợi vì nó đòi hỏi một kiếnthức chuyên môn cao về lập trình trên mạng thông qua Internet và hiểu biết cặn kẽ vềgiao thức World Wide Web Điều này còn đòi hỏi phải sửa và biên dịch lại mã nguồncủa máy chủ hoặc viết một Custom Server cho mỗi nhiệm vụ Ví dụ, chúng ta muốn mởrộng khả năng của Server để nó hoạt động giống nh một Email gateway để nhận mail từmột Browser và gửi nó đến một Browser khác Chúng ta cần cài mã vào Server để nó cóthể nhận và phân tích thông tin đầu vào từ Browser và gửi nó đến Browser khác thôngqua môi trờng mạng

Với nhiệm vụ nh vậy, trớc tiên phải truy cập đợc và mã nguồn của Server, điều màkhông phải lúc nào cũng có thể làm đợc Thứ hai, điều này thì khó với những ngời bìnhthờng, đó là phải có kiến thức chuyên môn giỏi Thứ ba, đó là những cái mà chúng ta đãcài đặt để mở rộng khả năng của Server chỉ là việc với đợc với Server đó Nếu chúng tamuốn chuyển Web server sang hoạt động ở một nền hệ điều hành khác, thì chúng taphải bắt đầu lại từ đầu và thời gian chuyển đổi mã nguồn để chạy trong một nền hệ điềuhành khác chắc cũng không phải là ít

Khả năng to lớn của CGI là tăng thêm sức mạnh cho Web server CGI mang lại biệnpháp giải quyết đơn giản và gọn ghẽ cho các vấn đề trên Giao thức CGI đ a ra một quichuẩn cho các chơng trình khi kết nối với Web Server Chúng ta có thể lập trình với bất

cứ một ngôn ngữ gì trên một máy tính nào để có thể thực hiện trao đổi thông tin vớiWeb server mà không cần biết nhiều lắm về kiến thức chuyên môn Chơng trình màchúng ta viết ra sẽ hoạt đông đợc với bất kỳ Web server nào có thể hiểu đợc giao thứcCGI Việc truyền thông với CGI đợc thực hiện trên cơ sở các thông tin đầu vào và đầu

ra qui chuẩn, có nghĩa là nếu chúng ta biết viết và đọc dữ liệu bằng các ngôn ngữ lậptrình bình thờng, thì chúng ta có thể viết đợc một ứng dụng cho Web server dựa vàocông nghệ CGI Ngoài việc phân tích thông tin đầu vào và đầu ra việc lập trình các ứngdụng CGI đều giống nh việc lập trình các ứng dụng khác Ví dụ, nếu chúng ta muốnviết một chơng trình đơn giản để hiện dòng chữ “Chào bạn” ở màn hình của Browser,chúng ta chỉ cần dùng một lệnh print của ngôn ngữ của chúng ta đang sử dụng và mộtvài định dạng đợc định nghĩa cho chơng trình CGI để in các thông tin cho thích hợp

II Lập trình với CGI

II.1 Lựa chọn ngôn ngữ

CGI là giao diện chung nên ta có thể sử dụng bất kỳ ngôn ngữ nào cho lập trìnhCGI Một vấn đề rất quan trong mà nhiều ngời đặt ra đó là “ dùng ngôn ngữ nào cho lậptrình CGI thì phù hợp nhất ? ” Đây là một câu hỏi không phải dế trả lời, tất nhiên tuỳtheo mục đích của bài toán có một số ngôn ngữ phù hợp hơn dành cho lập trình CGI.Trớc khi chọn ngôn ngữ lập trình, cần xem kỹ những đặc tính sau:

 Có thể hiển thị thông tin ở đầu ra chuẩn (STDOUT)

 Nhận thông tin ở đầu vào chuẩn (STDIN)

 Khả năng hiểu và cập nhật biến môi trờng

Hầu hết tất cả các ngôn ngữ lập trình và các ngôn ngữ Script ngày nay đều đáp ứng

đợc 3 yêu cầu trên Một vài ngôn ngữ phổ biến thích hợp cho lập trình CGI gồm :AppleScript, C/C++, C shell, Perl, tcl, Và Visual Basic

II.1.1 C/C++(Unix, Linux, Windows, Macintosh)

Trang 11

C/C++ là ngôn ngữ thông dụng với các nhà lập trình, một số ngời sử dụng chúngcho lập trình CGI Những ngôn ngữ này đòi hỏi những ngời lập trình có chút ít kinhnghiệm C và C++ ràng buộc những qui tắc nghiêm ngặt về khai báo biến, bộ nhớ, Thêm vào đó, những ngôn ngữ này thiếu tính mở rộng CSDL và những khả năng phùhợp mô hình vốn có, mặc dù những hàm, môdule có thể đợc viết để thực hiện nhữngchức năng này.

Tuy nhiên, C và C++ có thuận lợi lớn là có thể biên dịch ứng dụng CGI tạo tệp thựcthi nhị phân

II.1.2 Perl (Unix, Linux, Windows, Macintosh)

Perl là công cụ thông dụng nhất dùng để lập trình CGI, gồm nhiều đặc điểm mạnh,

và dễ dàng cho những ngời mới bắt đầu lập trình Perl có một số u điểm sau :

 Tính linh hoạt cao.

 Những phép toán thao tác chuỗi mạnh, nh những chức năng giao tiếp với dữliệu nhị phân

 Cấu trúc đơn giản và ngắn gọn

II.1.3 Visual Basic (chỉ dùng trên môi trờng Windows)

Visual Basic dùng trong Windows cũng nh những gì mà AppleScript dùng cho hệ

điều hành Macintosh kể cả lập trình CGI cũng tơng tự Với Visual Basic có thể giao tiếpnhững ứng dụng Windows khác nh những CSDL và bảng tính Vì thế Visual Basic thực

sự là công cụ mạnh cho việc phát triển ứng dụng CGI trên PC, và dễ tiếp cận Tuynhiên, Visual Basic còn thiếu những phép toán thao tác chuỗi

II.2 Những vấn đề cơ bản trong lập trình CGI

Tuy có nhiều vấn đề kỹ thuật bên trong, nhng chúng ta có thể tinh giảm việc lậptrình CGI thành 2 bớc nh sau: Nhận thông tin từ Web browser và hồi đáp thông tin trởlại Thông thờng, browser đợc giới thiệu một Form để nhập dữ liệu Khi nhập xong dữliệu vào Form, browser gửi lên Server và thông tin sẽ đợc chuyển đến chơng trình CGI.CGI sau đó sẽ phải chuyển đổi thông tin này sang dạng nó có thể hiểu đ ợc (giải mãthông tin), xử lý nó và sau đó gửi kết quả lại cho browser – có thể kết quả chỉ là mộtlời chào hay cũng có thể đó là một kết cục của một cuộc tìm kiếm cơ sở dữ liệu nào đó

II.2.1 Chơng trình ví dụ

Chúng ta sẽ bắt đầu với vấn đề lập trình truyền thống Chúng ta muốn viết một

ch-ơng trình hiện dòng chữ “Hello World” lên màn hình của Browser Trớc khi viết chch-ơngtrình này, chúng ta cần phải hiểu thông tin gì mà Browser muốn nhận đợc từ CGI Cũngcần biết thêm về cách để làm thế nào để chạy chơng trình này và phơng thức hoạt độngcủa nó CGI không phụ thuộc vào ngôn ngữ, vì vậy chúng ta có thể thực hiện chơngtrình này bằng bất cứ ngôn ngữ nào mà chúng ta muốn Chúng ta hãy xem chơng trình

“Hello World” viết bằng Perl:

#!/usr/bin/perl

# hello.cgi - My first CGI program

print "Content-Type: text/html\n\n";

print "<html> <head>\n";

print "<title>Hello, world!</title>";

print "</head>\n";

print "<body>\n";

print "<h1>Hello, world!</h1>\n";

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 12

print "</body> </html>\n";

Lu trữ chơng trình với tên là hello.cgi và đặt nó vào nơi thích hợp (chúng ta sẽ bàn

về cái gọi là “nơi thích hợp” này sau) Đối với hầu hết mọi ngời th mục thích hợp này

đ-ợc mang tên cgi-bin Bây giờ, gọi thực hiện chơng trình này từ Web server Điều đó cónghĩa là mở một URL

http://hostname/directoryname/hello.cgi

hosrtname: Là tên của Web server, directoryname là tên th mục mà chúng ta đã đặt

hello.cgi (có thể là cgi-bin) ở Web browser sẽ xuất hiện nh sau:

Trớc tiên chúng ta đang sử dụng một lệnh print đơn giản Các ch ơng trình CGIkhông cần bất cứ một chơng trình quản lý file hay một mô tả đặc biệt nào cho đầu ra

Để gửi dữ liệu đến Browser đơn giản ta chỉ việc dùng lệnh print ra stdout Thứ hai,chúng ta hãy chú ý đến nội dung của câu lệnh print đầu tiên (Content-Type: text/html) cáctham số trong câu lệnh này không hiển thị ở màn hình của Web Browser Chúng ta cóthể gửi bất cứ thông tin gì đến Browser ( có thể là một trang HTML, hay là hình ảnhhoặc âm thanh), nhng trớc tiên chúng ta cần thông báo cho Browser biết thông tin gì sắp

đợc gửi đến Dòng lệnh này thông báo cho Browser biết thông tin mà Browser sắp nhận

là một trang HTML Thứ ba, chơng trình của chúng ta đợc đặt tên là hello.cgi Khôngcần thiết phải có phần mở rộng là CGI Mặc dù mã nguồn của nhiều ngôn ngữ có cácphần mở rộng khác nhau, nhng phần mở rộng là CGI không phải là cách biểu thị ngônngữ mà là cách để Server xác định, nhận diện file là một file thực hiện đợc chứ khôngphải là file hình ảnh hay âm thanh, file HTML hay text file

Tóm lại hello.cgi có hai vấn đề chính

* Thông báo cho browser biết loại thông tin sẽ nhận (Content-Type: text/html)

* Thông báo cho browser thông tin để hiên thị (Hello, world!)

Để chứng minh sự độc lập của các chơng trình CGI với ngôn ngữ Chúng ta hãy viếtchơng trình hello.cgi bằng ngôn ngữ C

/* hello.cgi.c - Hello, world CGI */

Trang 13

printf("</body> </html>\n");

}

Chó ý r»ng phiªn b¶n hello.cgi viÕt b»ng Perl chung ta ®· sö dông lÖnh

print "Content-Type: text/html\n\n";

Trong khi phiªn b¶n hello.cgi viÕt b»ng C dïng

Qua hai vÝ dô lỊp tr×nh ®¬n gi¶n trªn chóng ta kÕt luỊn vÒ viÖc sö dông ng«n ng÷nµo ®Ó lỊp tr×nh kh«ng ¶nh hịng g× ®Õn Web server vµ Browser MƯc dï mìi ng«n ng÷

cê u vµ khuyÕt ®iÓm riªng trong mĩt vÍn ®Ò nµo ®ê

II.2.2 Outputting CGI

B©y gií chóng ta chóng ta ®· hiÓu rđ h¬n vÒ viÖc truyÒn th«ng tin cho Web browser

Nh chung ta ®· thÍy trong vÝ dô “Hello World”, Web browser nhỊn ®îc hai bĩ d÷ liÖu(Xem h×nh vÏ): 1 header chøa th«ng tin vÒ kiÓu cña th«ng tin ®Ò hiÓn thÞ ( ch¼ng h¹n

nh dßng Content-Type:) vµ th«ng tin thùc sù ( nh÷ng th«ng tin ®îc hiÓn thÞ ị Webbrowser) Hai khỉi th«ng tin nµy ®îc ph©n c¸ch b»ng mĩt dßng trỉng

Header ®îc gôi lµ HTTP header Nê cung cÍp th«ng tin quan trông vÒ lo¹i th«ng tin

mµ Browser s¾p söa nhỊn Cê vµi kiÓu HTTP header kh¸c nhau vµ lo¹i phư biÕn nhÍt lµlo¹i mµ chóng ta ®· sö dông trªn ®©y, header Content-Type

B¶ng liÖt kª c¸c HTTP header cê thÓ sö dông

Content-length Chiều dài của dòng ra Đơn giản là dữ liệu nhị phân

Content-type Kiểu nội dung MIME của dòng ra

Expires Ngày và thời gian khi tài liệu không phù hợp và sẽ

được nạp lại bởi trình duyệt Location Chuyển hướng Server

Pragma Trả tài liệu dấu

Status Trạng thái của yêu cầu

Refresh Client nạp lại tài liệu đã được Refresh

Set-Cookie Client lưu trữ tài liệu đặc biệt, hữu ích trong việc giữ

dữ liệu giữa các yêu cầu NguyÔn Hoµng ViÖt Khoa C«ng nghÖ th«ng tin-§iÖn tö viÔn th«ng

Trang 14

Theo sau phần header và dòng trống, chúng ta có thể in những dữ liệu muốn hiển

thị Nếu muốn truyền một trang HTML hãy in các thẻ HTML và dữ liệu ra stdout sau

phần header Có thể gửi hình ảnh, âm thanh, hay các file nhị phân cũng đơn giản bằng

cách in nội dung của chúng ra stdout Sau đây đề cập đến hai header quan trọng nhất.

Tiêu đề Content-Type: header này mô tả kiểu dữ liệu mà chơng trình CGI trả về.

Định dạng thích hợp cho header này là:

Content-Type: subtype/type

Phần subtype/type là một kiểu MIME phù hợp (Multipurpose Internet Mail

Extensions) Dạng MIME phổ biến nhất là kiểu HTML :text/html Bảng dới đây liệt kê

các kiểu MIME phổ biến

Text/html HyperText Markup Language (HTML)

Text/plain Plain text files

Image/gif GIF graphics files

Image/jpeg JPEG compressed graphics files

Audio/basic Sun *.au audio files

Audio/x-wav Windows *.wav files

Chơng trình CGI có thể trả về hầu nh tất cả các loại tài liệu ảo tơng ứng với nhữngloại mà browser có thể quản lý Nó có thể trả về văn bản bình thờng, một HTML file,hình ảnh, âm thanh, PDF file đó chính là lý do mà trong thông tin mà browser gửi

đến server có kèm theo một danh sách "accept type " mà nó có thể quản lý Server l u trữcác thông tin này trong biến môi trờng HTTP_ACCEPT và chơng trình CGI có thể kiểmtra biến môi trờng này để có thể trả về những định dạng file mà browser có thể chấpnhận

Khi trả kết quả về cho browser, chơng trình CGI cần đến tiêu đề Content-Type để

báo cho browser loại dc liêu gì mà nó gửi và để cho browser định dạng và hiển thị dữliệu theo đúng cách

Tiêu đề Content-length: header này chỉ ra kích thớc của dữ liệu đợc trả về Tiêu đề

này đợc áp dụng trong trờng hợp dữ liệu trả về là dữ liệu nhị phân Để hiểu rõ cách sửdụng header này chúng ta hãy xét ví dụ sau đây:

#!/usr/bin/perl

$gif_image=join("/", $ENV{'DOCUMENT_ROOT'}, "icons/tiger.gif");

if(open(IMAGE,"<",$gif_image)){

$no_bytes=(stat($gif_image))[7];

print "Content-Type: image/gif\n";

print "Content-length: $no_bytes\n\n";

print <IMAGE>

}else{

print "Content-Type: text/plain\n\n";

print "Sorry ! I cannot open the file $gif_image";

}

exit (0);

Trong ví dụ trên có hai vấn đề đáng quan tâm Thứ nhất, cần chú ý đến tiêu đềcontent-type là image/gif Điều này báo hiệu cho browser biết một hình ảnh GIF sắp đ-

Trang 15

ợc gửi đến, do đó browser biết cách để hiển thị nó Thứ nhì, cần chú ý đến tiêu đềcontent-length Tiêu đề này báo cho server biết kích thớc của dữ liệu của chơng trìnhcần gửi Điều này ngăn ngừa đợc lỗi xảy ra trong khi server thao tác với các tệp nhịphân, bởi vì server sẽ đọc số bytes đợc chỉ định mà không cần biết đâu là ký tự kết thúc.Trong ví dụ này để có đợc content-length hợp lý (cỡ của file tiger.gif) chúng ta đã

sử dụng lệnh stat Lệnh này trả về một mảng gồm 13 thành phần bao gồm thông tin vềfile đợc đa ra trong tham số của lệnh Trong đó thành phần thứ 8 là kích thớc của file(chú ý chỉ số mảng trong Perl bắt đầy từ 0)

II.2.2 Sơ lợc về HTML Forms

Một trong những tính năng nổi bật nhất của CGI là xử lý các Forms Forms là mộtphần của HTML cho phép ngời sử dụng cung cấp thông tin Giao tiếp Forms tạo chotrình duyệt Web một quá trình tơng tác giữa ngời sử dụng và ngời cung cấp

Hình vẽ : Sự tơng tác giữa form và CGI

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Chấp nhận

USER

User yêu cầu form

User điền

T.tin form

Gởi form về cho Client User gởi

form

Gởi đến ứng dụng CGI

Gởi về cho Client

Xử lý dữ liệu

Hiển thị Gởi về cho Client

NETWORK

Application SerVer

Trang 16

II.2.2.1 Thẻ FORM

Dòng bắt đầu của một form:

<Form ACTION=”http:/192.0.1.1/cgi-bin/program.cgi” METHOD=”Post”>

Thẻ Form khởi đầu một form Tài liệu có thể chứa nhiều forms, các forms không thểlồng vào nhau, form này không đợc phép đặt trong form kia

Hai thuộc tính trong thẻ <FORM> là ACTION và METHOD rất quan trọng Thuộctính ACTION xác định URL của chơng trình CGI xử lý dữ liệu Không hạn chế phải đặtchơng trình trên Server của bạn, có thể xác định URL trên một Host từ xa nếu chơngtrình cho phép làm điều đó

Thuộc tính METHOD xác định cách thức Server gởi thông tin từ form đến ch ơngtrình CGI POST gởi dữ liệu qua đầu vào chuẩn, trong khi GET gởi thông tin qua cácbiến môi trờng Nếu không có phơng thức nào xác lập, Server sẽ ngầm định là GET Cảhai phơng thức đều có những u điểm và nhợc điểm của nó

II.2.2.2 Trờng text và Password

Hầu hết các phần tử đợc thi hành sử dụng thẻ <INPUT> Thuộc tính TYPE của

<INPUT> xác định kiểu của đầu vào là gì Một số loại khác nhau: nh trờng text,password Sau đây là ví dụ của đầu và text:

Name: <Input Type=”text” Name=”User” Size=40><BR>

Password: <Input Type=”password” Name=”pass” Size=10><BR>

Trờng hợp này trờng text và trờng password đợc tạo ra nhờ sử dụng các đối số

“text”, “password”, trờng password cũng tơng tự nh trờng text nhng chỉ khác là các tự

đánh vào đợc hiển thị dới dạng dấu “*” Nếu bỏ qua thuộc tính TYPE, trờng text sẽ mặc

định

Thuộc tính NAME xác định tên của phần tử đầu vào Nó không hiển thị bởi trìnhduyệt, nhng đợc sử dụng để nhận dữ liệu khi chuyển tới chơng trình CGI Ví dụ, trờngvào có tên Name=”user”, nếu ai đó đánh “the” vào trờng đó, thì phần dữ liệu gởi đếntrình duyệt là: user=the

II.2.2.3 Nút Reset và Submit

Hai kiểu quan trọng của thẻ <INPUT> là Submit và Reset

<Input Type=”submit” Value=”Gởi dữ liệu” >

<Input Type=”reset” Value=”Xoá dữ liệu” >

Hầu hết các forms đều cung cấp hai nút “Submit” và “Reset” Nút “submit” gởi tất

cả thông tin từ form đến chơng trình CGI xác định bởi thuộc tính ACTION Không có

nút này, form sẽ không gởi đợc dữ liệu đến chơng trình CGI Nút “Reset” xoá tất cả

thông tin đánh vào của ngời sử dụng, ngời sử dụng có thể nhấn reset nếu muốn nhập lạidữ liệu

II.2.2.4 Tham chiếu một số tags

Trang 17

Sau ®©y giíi thiÖu mĩt danh s¸ch ng¾n c¸c tags Form:

<FORM ACTION=”cgi-bin/pro.exe” METHOD=”Post”> Khịi ®Ìu Form

<Input TYPE=”text” NAME=”name” VALUE=”value” SIZE=size> Tríng text

<Input TYPE=”password” NAME=”name” VALUE=”value”

<Input TYPE=”hidden” NAME=”name” VALUE=”value” Tríng Ỉn

<Input TYPE=”Checkbox” NAME=”name” VALUE=”value” Hĩp kiÓm tta

<Input TYPE=”Radio” NAME=”name” VALUE=”value” Nót Radio

<Select NAME=”name” SIZE=1>

<Option selected >Mĩt

<Option selected >Hai

</Select>

<Input TYPE=”Submit” NAME=”name” VALUE=”value” Nót gịi

<Input TYPE=”Reset” NAME=”name” VALUE=”value” Nót xo¸

II.2.3 Input CGI

Trong vÝ dô “Hello World” chóng ta ®· xem xÐt ị phÌn tríc, ta ®· biÕt c¸ch viÕt mĩtch¬ng tr×nh CGI truyÒn th«ng tin tõ Server ®Õn Browser Trong thùc tÕ th× mĩt ch ¬ngtr×nh CGI chØ xuÍt d÷ liÖu kh«ng th«i th× kh«ng cê nhiÒu vÍn ®Ò l¾m ®Ó bµn Chóng ta

®ang bµn ®Õn mĩt kh¶ n¨ng quan trông cña CGI ®ê lµ: nhỊn th«ng tin tõ Web browser,

®Ưc tÝnh nµy t¹o nªn cho Web kh¶ n¨ng t¬ng t¸c mĩt c¸ch tù nhiªn

Mĩt ch¬ng tr×nh CGI khi ®îc gôi thùc hiÖn nê sÏ nhỊn ®îc hai lo¹i th«ng tin sau:

- Thø nhÍt, c¸c lo¹i th«ng tin kh¸c nhau vÒ browser (browser type, th«ng tin g×browser cê thÓ hiÓn thÞ ?, tªn m¸y tÝnh ị xa, v.v ), th«ng tin vÒ Server ( tªn vµ phiªnb¶n phÌn mÒm Server ®ang ch¹y, cưng, v.v ) vµ vÒ b¶n th©n ch¬ng tr×nh CGI (tªn ch-

¬ng tr×nh vµ ®íng dĨn) Server cung cÍp cho CGI tÍt c¶ c¸c th«ng tin nµy th«ng qua c¸cbiÕn m«i tríng

- Thø nh×, ch¬ng tr×nh CGI cê thÓ nhỊn ®îc nh÷ng th«ng tin mµ ngíi sö dôngnhỊp vµo Nh÷ng th«ng tin nµy, tríc tiªn ®îc browser mĨ ho¸ sau ®ê göi ®i th«ng quac¸c biÕn m«i tríng (ph¬ng trøc GET) hoƯc lµ ®Ìu vµo chuỈn (stdin- ph¬ng thøc POST)

C¸c biÕn m«i tríng

HiÓu biÕt vÒ nh÷ng biÕn m«i tríng cê thÓ sö dông cho ch¬ng tr×nh CGI lµ mĩt

®iÒu rÍt h÷u Ých, gióp cho viÖc hôc lỊp tr×nh CGI vµ lµ c«ng cô gì rỉi rÍt tỉt B¶ng díi

®©y liÖt kª c¸c biÕn m«i tríng kh¶ dông trong lỊp tr×nh CGI Chóng ta cê thÓ viÕt mĩtch¬ng tr×nh in tÍt c¶ c¸c biÕn m«i tríng nµy ra

Biến môi trường Mô tả

GATEWAY_INTERFACE Phiên bản CGI server sử dụng

SERVER_NAME Tªn của Server hoặc địa chỉ IP

SERVER_SOFTWARE Tên và phiên bản của phần mềm Server đang

dùng SERVER_PROTOCOL Tên và phiên bản giao thức thông tin đi cùng

SERVER_PORT Số cổng của Host mà Server đang chạy

REQUEST_METHOD Ph¬ng thức yêu cầu thông tin

PATH_INFO Thông tin đường dẫn phụ trợ đến chương trình

CGI PATH_TRANSLATED Phiên bản biên dịch của đường dẫn cho bởi

biến PATH_INFO SCRIPT_NAME Đường dẫn ảo của Script sẽ được thực thi

DOCUMENT_ROOT Thư mục gỉc cña Web được phục vụ

QUERY_STRING Thông tin truy vấn đến chương trình

NguyÔn Hoµng ViÖt Khoa C«ng nghÖ th«ng tin-§iÖn tö viÔn th«ng

Trang 18

REMOTE_HOST Hostname từ xa mµ người sử dụng yêu cầu ®Õn

REMOTE_ADDR Địa chỉ IP từ xa của người sử dụng tạo nên

yêu cầu AUTH_TYPE Phương thức kiÓm tra ®Ưc quyÒn

REMOTE_USER Tên xác nhận người sử dụng

CONTENT_TYPE Kiểu MIME của dữ liệu truy vấn, như

text/html

“text/html” ”

REMOTE_IDENT Người sử dụng tạo yêu cầu Biến này chỉ

được thiết lập nếu cờ identitycheck được phép, và máy client hổ trợ sơ đồ nhận biết (rfc 931)

CONTENT_LENGTH Chiều dài dữ liệu (byte hoặc số ký tự) đến

chương trình cgi thông qua đầu vào chuẩn.

HTTP_FROM Địa chỉ email của người sử dụng tạo yêu

cầu Hầu hết trình duyệt không hổ trợ biến này.

HTTP_ACCEPT Danh sách kiểu MIME kiểu client cập nhật

HTTP_USER_AGENT Trình duyệt client đang dùng phân phát yêu cầu HTTP_REFERER URL của tài liệu chỉ đến trước khi cập nhật

print "<h1>CGI Environment</h1>\n";

foreach $env_var (keys %ENV) {

print "<B>$env_var</B> = $ENV{$env_var}<BR>\n";

Trang 19

extern char **environ;

Lợc đồ mã hoá dữ liệu đầu vào

Khi ngời sử dụng gởi (Submit) một form, trớc tiên browser phải mã hoá thông tin

tr-ớc khi gửi nó đến cho Server và sau đó đến chơng trình CGI Khi sử dụng thẻ

<INPUT>, mỗi trờng sẽ đợc đặt một tên tợng trng - có thể xem là một biến, mà giá trịcủa biến này sẽ là nội dung mà ngời sử dụng nhập vào Nh vậy, nếu nh form có nhiềuthẻ <INPUT> thì dữ liệu của form sau khi đợc Submit sẽ là một danh sách các cặp

tênbiến/giátrị Sẽ có sự nhầm lẫn ở đây, làm sao ta phân biệt đợc đâu là biến, đâu là trị

trong danh sách nói trên

Để giải quyết vấn đề này Browser sử dụng cái gọi là URL Encoding Nội dung củaURL Encoding có thể đợc tóm tắt nh sau:

- Phân cách các trờng khác nhau bằng dấu và "&".

- Phân cách tên biến và giá trị của nó bằng dấu "=", với tên biến ở bên trái và giá trị ở bên phải.

- Thay thế các khoảng trống bằng dấu cộng "+".

- Thay thế tất cả các ký tự "không bình thờng" bằng dấu phần trăm (%) theo sau là hai ký số hệ cơ số 16 (mã của ký tự đó).

Các ký tự "không bình thờng" và giá trị ở hệ cơ số 16 của chúng

Character Hexadecimal Value

Trang 20

Enter your age: <input type=text name="age"><p>

Enter your email: <input type=text name="email"><p>

Theo thủ tục để mã hóa những cặp này, trớc tiên browser phải thay thế những ký tự

"bất bình thờng" Trong ví dụ này, chỉ có ký tự tự @ và nó đợc thay thế bởi %40 Vàbây giờ chúng ta có:

Trang 21

Sự khác nhau giữa GET và POST

Sau khi dữ liệu đầu vào đợc mã hoá, chúng ta có hai cách gửi thông tin đến Webserver và chơng trình CGI đó là thông qua một trong hai phơng thức GET và POST Nhvậy thì điểm khác nhau giữa hai phơng thức này là gì ?

Theo phơng thức GET chuỗi đầu vào đợc truyền đến chơng trình CGI bằng cáchthêm thông tin vào phía sau của URL Ví dụ, để truyền chuỗi đầu vào:

name=Nguyễn+Hoàng+Việt&age=23&email=bcuong%40dng.vnn.vn đến chơngtrình CGI program.cgi, browser phải thêm một dấu "?" vào sau của URL và theo sau làthông tin Nh vậy URL của chúng ta sẽ có dạng nh sau:

http://192.0.1.1/cgi-bin/program.cgi?

name=Nguyễn+Hoàng+Việt&age=23&email=bcuong%40dng.vnn.vn

Tất cả những phần trong URL nằm phía sau dấu "?" đợc lu trữ trong biến môi trờngQUERY_STRING Sau đó chơng trình CGI sẽ phân tích chuỗi này thành dạng nó cóthể hiểu đợc

Phơng thức GET có vài vấn đề cố hữu: Thứ nhất, cỡ của chuỗi đầu vào bị hạn chếbởi kích thớc của biến môi trờng QUERY_STRING Nói chung chúng ta không thể cómột QUERY_STRING lớn hơn 1KB (1024 ký tự) DO đó GET không làm việc đợc vớicác form với khối lợng dữ liệu lớn Thứ nhì, chúng ta sẽ có những URL dài dòng và sấu

xí, dễ gây ra sai xót trong việc nhập URL

Một phơng pháp khác để gởi dữ liệu đến Server đó là sử dụng phơng thức POST.Phơng thức GET truyền dữ liệu thông qua biến môi trờng QUERY_STRING, trong

khi đó POST chuyển nó thông qua stdin POST là phơng thức thờng đợc sử dụng hơn,

đặc biệt là đối với những form chứa nhiều dữ liệu, bởi vì không bị hạn chế về số lợng dữliệu gửi đi Tuy nhiên đối với các form ít dữ liệu thì GET vẫn hay đợc sử dụng, hơn nữaGET là phơng thức ngầm định khi ta không khai báo cụ thể trong tham số METHOD

Để xác định phơng thức nào đang đợc sử dụng, chơng trình CGI kiểm tra biến môitrờng mang tên REQUEST_METHOD, khi chơng trình chạy biến môi trờng này sẽnhận một trong hai giá trị là GET hoặc POST Nếu nhận giá trị là POST thì độ dài củathông tin đợc mã hoá và lu trữ trong biến môi trờng mang tên CONTENT_LENGTH

Thuật toán giải mã

Nh ta đã biết chơng trình CGI nhận đợc dữ liệu là một chuỗi đã đợc mã hoá bởibrowser Để thông tin trở nên có thể sử dụng đợc chơng trình CGI cần giải mã thông tinnhận đợc theo đúng cách Trớc hết, chơng trình cần xác định dữ liệu đợc gởi theo phơngthức nào Điều này có thể thực hiện bởi việc xem giá trị trong biến môi trờngQUERY_METHOD Nếu giá trị chỉ định yêu cầu GET, thì hoặc chuỗi query hoặcthông tin đờng dẫn phụ trợ đợc chứa trong biến môi trờng Mặt khác, nếu là yêu cầuPOST, số bytes xác định bởi biến môi trờng CONTENT_LENGTH phải đợc đọc từ đầuvào chuẩn

Sau đây là thuật toán giải mã:

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 22

1 Xác định phơng thức yêu cầu(GET hay POST) bởi kiểm tra biến môi

7 Hình thành bảng khoá-trị (key-value) với khoá là chỉ mục.

Chú ý rằng thứ tự của các bớc trong thuật toán là hết sức quan trọng Nếu khôngtuân theo thứ tự này thì kết qủa giải mã sẽ sai, thông tin nhận đợc sẽ bị nhầm lẫn

# Hình thành cặp (key, value) từ mảng @in.

($key, $val) = split(/=/,$in[$i],2); # splits on the first =.

# Chuyển %XX từ dạng số hexa thành dạng alphanumeric của chúng

$key =~ s/%( )/pack("c",hex($1))/ge;

$val =~ s/%( )/pack("c",hex($1))/ge;

# tập hợp các key và value thu đợc vào một mảng liên hợp

$in{$key} = "\0" if (defined($in{$key})); # \0 is the multiple separator

Trang 23

 Để sử dụng CGI, trớc hết ta viết một chơng trình hoặc Script Perl có thể làngôn ngữ phổ biến cho việc lập trình Ngôn ngữ nh C, C++ hoặc Fortran cóthể sử dụng để cập nhật CGI dễ dàng sau khi biên dịch xong

 Tiếp đến, Script hoặc chơng trình biên dịch đợc đặt vào trong một th mục

đặc biệt trên Web Server gọi là /cgi-bin, nó chứa tất cả các chơng trình CGI

và Scripts Nhằm mục đích bảo mật mà các chơng trình đặt trong th mụckhác không chạy đợc Nếu cho phép đặt tự do, thì sẽ khó khăn cho việc bảoquản và thực hiện chúng

 Sau khi gởi chơng trình CGI đến th mục cgi-bin, nó liên kết với URL trongHTML trên trang Web

 Khi kích URL, Server khởi đầu chơng trình CGI (qua phơng thức GET hoặcPOST), đặt trên Web Server Ví dụ, nếu chức năng của chơng trình CGI làtìm kiếm CSDL, thì chơng trình CGI có thể gởi một form đến Client TừClient, dữ liệu trên form đợc gởi về cho chơng trình CGI nhờ các biến môitrờng STDIN Dữ liệu đợc định dạng bằng cách mã hoá cặp giá trị

Key/Value.

 Chơng trình CGI kết nối CSDL và yêu cầu thông tin CSDL gởi dữ liệu đếncho chơng trình CGI Thông tin có thể đợc định dạng dới các dạng khácnhau: Text, Graphics, Sound, Video files, URLs , chơng trình CGI trả kết

quả về cho Server (STDOUT), rồi gởi về cho trình duyệt.

Chơng trình CGI còn định dạng dữ liệu, ví dụ : lấy thông tin và đa vào khuôn dạngcác trang HTMLs, vì vậy ngời sử dụng có thể đọc nó qua trình duyệt Web

Tóm lại, CGI làm việc qua 7 bớc:

 Trình duyệt gởi yêu cầu đến Server

 Server thu nhận thông tin cung cấp bởi Client

 Server gởi thông tin đến chơng trình CGI (CGI Script).

 Chơng trình CGI xử lý thông tin và kể cả đọc/ghi dữ liệu bên trong(từ CSDL).

 Chơng trình CGI trả kết quả cho Server

Vars

Trang 24

III Cài đặt và chạy chơng trình CGI

Trong các phần trớc chúng ta đã bàn về cách thức lập trình với CGI, phần này xemxét về cấu hình Web server để sử dụng CGI, cài đặt và chạy chơng trình Chúng ta sẽxem xét một vài server khác nhau trên các hệ điều hành khác nhau

Tất cả các Server đều yêu cầu khoảng trống cho các tập tin chơng trình và cho cáctài liệu HTML Khu vực cho server đợc gọi là ServerRoot và vùng cho tài liệu đợc gọi

là DocumentRoot Trên hệ thống UNIX, thì ServerRoot thờng là th mục /usr/local/etc/

httpd và DocumentRoot thờng là th mục /usr/local/etc/httpd/htdocs Điều này không

nhất thiết là đúng trên mọi hệ thống, ví dụ nh trên hệ thống LINUX thì ServerRoot lại là/usr/etc/httpd

Khi truy cập file bằng Web browser, hãy chỉ định rõ file trong URL t ơng ứng vớiDocumentRoot Ví dụ, có file /usr/etc/httpd/htdocs/index.html trên hệ thốngmymachine.edu, chúng ta phải truy cập file đó với URL sau:

http://mymachine.edu/index.html

III.1 Cấu hình Server để chạy CGI

Hầu hết các Web server đều đợc tiền cấu hình cho việc sử dụng các chơng trìnhCGI Nhìn chung, Web server đợc thông báo liệu một file có phải là ứng dụng CGI haykhông là qua hai con đờng sau:

- Một th mục đợc chỉ định : Một vài Server cho phép chúng ta chỉ định tất cả

các file nằm trong một th mục đợc chỉ ra là các ứng dụng CGI (thờng th mụcmặc định này có tên là cgi-bin)

- Phần mở rộng : Nhiều Server đợc tiền cấu hình để dịch các file có phần mở

rộng là cgi nh là các ứng dụng CGI

Trong một phạm vi nào đó thì phơng pháp dùng th mục chỉ định là lỗi thời (cácserver cổ nhất đã sử dụng phơng pháp này nh là biện pháp duy nhất để xác định file nào

là tập tin CGI ), nhng nó cũng có một số u điểm riêng nh sau :

- Bảo đảm cho các chơng trình CGI đợc trung tâm hoá, dễ quản lý, ngăn cản sựlộn xộn của các th mục

- Không bị hạn chế bởi bất cứ phần mở rộng nào, vì vậy có thể tự do trong việc

đặt tên file Một số servers hỗ trợ việc chỉ định một vài th mục làm th mục CGI

- Dễ dàng cho việc bảo mật hệ thống Trên hệ thống có nhiều ngời sử dụng thìviệc chỉ định rõ th mục nào là th mục chứa chơng trình CGI rất có lợi cho ngờiquản trị hệ thống Một ngời sử dụng muốn cài đặt chơng trình CGI của họ lênserver thì cần phải thông qua ngời quản trị hệ thống, mã nguồn sẽ đợc kiểm tra

và an ninh hệ thống đợc bảo đảm

Việc xác định chơng trình CGI bằng phân mở rộng của tên file có thể hữu ích dotính linh hoạt của nó Không bị hạn chế hạn chế bởi một th mục đơn lẻ cho chơng trìnhCGI Hầu hết các server đầu đợc cấu hình để có thể nhận dạng chơng trình CGI bằngphàn mở rộng tên file, mặc dù không phải tất cả chúng đều cấu hình theo cách mặc

định này

Trang 25

III.2 Cài đặt CGI trên server UNIX

Mặc dù các Web server chạy trên UNIX hầu hết đã đợc cấu hình sẵn, xong cũngcần thực hiện một vài điều để chơng trình CGI hoạt động đợc Nếu chúng ta sử dụngcác ngôn ngữ script nh Perl hoặc Tcl để viết các ứng dụng CGI trên hệ thống UNIX,chúng ta cần chú ý đến dòng đầu tiên trong mỗi script Dòng này chỉ ra đ ờng dẫn tuyệt

đối đến trình thông dịch Ví dụ, một CGI script dùng trình thông dịch Perl nằn trong thmục /usr/bin thì dòng đầu tiên của script phải là:

#!/usr/bin/perl

Theo ngầm định Apache Web servers chạy trên UNIX đợc cấu hình để hiểu rằng tấtcả các file nằm trong th mục cgi-bin là các chơng trình CGI Để thay đổi vị trí th mụccgi-bin chúng ta cần sửa lại file cấu hình srm.conf Định dạng cho cấu hình th mục nàylà

ScriptAlias fakedirectoryname realdirectoryname

ở đây fakedirectoryname là tên th mục giả (/cgi-bin) và realdirectoryname là đờng

dẫn đến nơi chơng trình CGI thực sự đợc lu trữ Chúng ta có thể cấu hình nhiều hơn một

ScriptAlias để có đợc nhiều th mục chứa chơng trình CGI bằng cách thêm các dòng ScriptAlias vào tệp tin này Ví dụ, các chơng trình CGI của chúng ta đợc lu trữ trong th

mục /home/httpd/cgi-bin thì dòng ScriptAlias trong srm.conf có thể nh sau

ScriptAlias /cgi-bin/ /home/httpd/cgi-bin

Để gọi các chơng trình CGI nằm trong th mục này chúng ta sử dụng URL:

http://hostname/cgi-bin/programname

Trong đó hostname là tên máy Web server, programname là tên chơng trình CGI.

Ví dụ chúng ta có chơng trình Hello.cgi trong th mục /home/httpd/cgi-bin và trên Webserver mang tên www.athv.edu thì để gọi chơng trình Hello.cgi chúng ta sử dụng URLsau: http://www.athv.edu/cgi-bin/Hello.cgi

Nếu chúng ta muốn cấu hình cho server nhận biết một file là chơng trình CGI thôngqua phần mở rộng cgi thì chúng ta cần thay đổi hai file cấu hình Đầu tiên, trong filesrm.conf bỏ chú thích ở đầu dòng:

AddType application/x-httpd-cgi cgi

Tiếp theo cần sửa đổi trong file access.conf để CGI có thể thực hiện đợc trong bất

ký th mục nào Để làm điều này thêm tuỳ chọn ExcCGI vào dòng Option nh sau

Option Indexes FollowSymLinks ExecCGI

III.3 Chạy chơng trình CGI

Sau khi mã nguồn của chơng trình CGI đã đợc viết và server đã đợc cấu hình hoànchỉnh thì việc gọi thực hiện một chơng trình là hết sức đơn giản Nếu chơng trình CGIchỉ có đầu ra (nh hello world!) thì ở browser chúng ta chỉ việc nhập vào URL Hầu hếtcác chơng trình CGI đợc gọi thực hiện sau khi một form HTML đợc submit, chúng tacần biết form HTML đó và biết nó gọi thực hiện chơng trình CGI nào trên server

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 26

Có 3 cách để vận hành một chơng trình đợc viết bằng ngôn ngữ Perl Nhng dù cáchnào đi nữa thì trình thông dịch Perl sẽ đọc mã nguồn sau đó dịch và đệ trình lên cho lớp

vỏ để đem thực hiện Chơng trình viết theo ngôn ngữ perl là một tập hợp các lệnh, cáckhối lệnh đợc sắp sếp theo một thứ tự nào đó tuỳ công việc cần giải quyết Một lệnhperl kết thúc bằng dấu chấm phảy ";" Những phần nằm sau ký tự # đợc xem nh là chúthích

1 ở dấu nhắc của hệ thống đánh tên trình thông dịch Perl, sau đó nhấn Enter.Khi đó Linux sẽ đợi ngời dùng nhập vào các dòng mã Sau khi mã nguồn của chơngtrình đợc nhập và chúng ta nhấn Ctrl+D để báo cho Perl biết là mã nguồn đến đây là kếtthúc Chơng trình vừa nhập vào sẽ đợc dịch và chạy, kết quả sẽ đợc hiện ngay lên mànhình

Ví dụ:

[athv /root]#perl

print "Hello World !";

Ctrl +D

Trang 27

Hello World

[athv /root]#

2 Theo cách này, chơng trình nguồn đợc soạn thảo bằng một trình soạn thảo nào

đó ( có thể là vi, emacs .) và đợc lu trữ dới dạng một file văn bản bình thờng Sau đó

print "Hello $yourname !\n";

Giả sử ta lu trữ chơng trình này với tên là hello.pl và sau khi sử dụng lệnh chmod để

đặt thuộc tính khả thi cho chơng trình, thì để chạy chơng trình chúng ta chỉ việc gõ tênchơng trình ( giả sử ta nhập vào Hoàng Việt)

II Biến trong Perl

Perl có 3 kiểu biến cơ bản: kiểu vô hớng (Scalar), kiểu mảng (Array) và mảng liênhợp (Associative array) Biến vô hớng có thể giữ giá trị của một con số ( có thể là sốnguyên, số thực với dấu chấm động) hoặc một xâu chuỗi (string) Một mảng có thể lutrữ nhiều dữ liệu vô hớng theo một thứ tự liên tiếp, những dữ liệu vô hớng này đợc truycập theo chỉ mục của mảng (chỉ mục bắt đầu từ 0) Mảng liên hợp có cấu trúc giống nhmảng trong việc lu trữ theo thứ tự liên tiếp các xâu chuỗi nhng nó sử dụng một xâuchuỗi khác làm chỉ mục để địa chỉ hoá các phần tử của mảng thay vì một con số

II.1 Biến vô hớng(Scalar variables)

Cú pháp cho một biến vô hớng là:

$variable_name

Nguyễn Hoàng Việt Khoa Công nghệ thông tin-Điện tử viễn thông

Trang 28

Dấu "$" đứng trớc một biến vô hớng là bắt buộc Theo sau dấu "$" là qui tắc đặt tênbiến giống nh các ngôn ngữ khác Chú ý rằng, biến trong Perl có thể không cần khaibáo trớc khi sử dụng, tuy nhiên việc khai báo trớc sẽ thuận lợi hơn cho việc gỡ rối và

đọc chơng trình về sau Có thể đặt tên biến trùng nhau, một biến mảng có thể trùng vớitên biến vô hớng hoặc mảng liên hợp, Perl không bắt bẻ chuyện này ( cú pháp của biếnmảng và mảng liên hợp sẽ bàn đến sau)

Để gán giá trị cho các biến vô hớng, chúng ta hãy xem vài ví dụ sau:

Để hiển thị giá trị của một biến chúng ta sử dụng câu lệnh print Vì vậy, để in giá trị của biến $name chúng ta dùng lệnh sau:

print $name;

Giá trị của biến vô hớng $name sẽ đợc in lên màn hình Perl nhận dữ liệu vào từ đầu

vào chuẩn (bàn phím) và xuất dữ liệu ra đầu ra chuẩn (màn hình)

II.2 Khối lệnh và các cấu trúc điều khiển

Theo các ngôn ngữ quen thuộc nh C, Pascal thì chúng ta có thể gọi đây là một lệnhkép, phát biểu kép, hay một thuật ngữ tơng tự nào đó Đơn giản trong Perl, khối lệnh làtập hợp nhiều lệnh (có thể là một khối lệnh khác) nằm gọn trong cặp dấu móc nhọn

"{ và }" Việc định nghĩa và nhận biết các khối lệnh rất quan trọng, đặc biệt khi chúng

ta quan tâm đến tầm vựng của biến trong chơng trình, giá trị của nó trong một thời điểmnào đó cũng nh ảnh hởng của các câu lệnh đến giá trị của biến Thông thờng, chúng tahay gặp các khối lệnh ở các cấu trúc lặp, các cấu trúc điều kiện, các định nghĩa chơngtrình con Tuy nhiên, một khối lệnh nh sau là hoàn toàn hợp lệ:

until(<điều kiện>) { # Ngợc lại với phát biểu while.

thực hiện các mã lệnh ở đây trong khi <điều kiện> sai;

}

do {

thực hiện các lệnh trong khối ít nhất một lần

dựng khi <điều kiện> sai

} while(<điều kiện>);

Trang 29

do {

thực hiện các lệnh trong khối ít nhất một lần

dựng khi <điều kiện> đúng

thực hiện các lệnh khi <điều kiện 1> đúng;

} elsif (<điều kiện 2>) {

thực hiện các lệnh khi <điều kiện 2> đúng;

} elsif (<điều kiện N>) {

thực hiện các lệnh khi <điều kiện N> đúng;

} else {

thực hiên các lệnh khi các <điều kiện 1 N> sai;

}

unless (<điều kiện 1>) { # ngợc lại với phát biểu If

thực hiên các lệnh khi các <điều kiện 1> sai;

}

Thông qua các ví dụ trên về cách sử dụng các khối lệnh của Perl, một cách gián tiếpchúng ta đã khảo sát các cấu trúc điều khiển cơ bản của Perl

Điều kiện trong các khối lệnh này là bất kỳ một thứ gì của Perl, từ một biến đến một

biểu thức, miễn là có giá trị trả về là hoặc giá trị đúng (true) hoặc giá trị sai (false) Một giá trị true là một giá trị khác không (non-zero), hoặc một chuỗi không rỗng (non-

empty string).

II.3 Phạm vi của biến

Các khối lệnh có thể đợc khai báo nằm trong các khối lệnh khác để tạo nên các cấutrúc khối lồng nhau(khối lệnh ở đây có thể là một thủ tục, hàm) Biến đợc khai báotrong trong một khối lệnh nào đó thì theo ngầm định thì nó là biến toàn cục đối với toàn

bộ chơng trình Để giới hạn phạm vi của biến trong một khối lệnh, trong một chơng

trình con perl cung cấp cho chúng ta hai hàm là my() và local() Ví dụ chúng ta có thể

khai báo biến trong một khối nh sau: my $variable1 Theo cách này $variable1 chỉ truy

cập đợc trong nội bộ khối lệnh mà biến đợc khai báo, không thể truy cập đợc trong tất

cả các khối con Ngoài ra có thể khai báo: local $variable2( nếu có nhiều biến cần khai

báo chúng ta sử dụng cặp ngoặc đơn và các biến cách nhau bởi dấu phảy ",") Theo

cách này $variable2 có thể truy cập đợc trong khối nó đợc khai báo và tất cả các khối

Trang 30

LËp tr×nh CGI b»ng Perl trªn Linux 30

print("firstSub: firstVar = $firstVar\n");

print("firstSub: secondVar = $secondVar\n\n");

secondSub();

print("firstSub: firstVar = $firstVar\n");

print("firstSub: secondVar = $secondVar\n\n");

} sub secondSub{

print("secondSub: firstVar = $firstVar\n");

print("secondSub: secondVar = $secondVar\n\n");

$firstVar = "ccccC";

$secondVar = "DDDDD";

print("secondSub: firstVar = $firstVar\n");

print("secondSub: secondVar = $secondVar\n\n");

}

KÕt qu¶ ch¹y ch¬ng tr×nh firstSub: firstVar = AAAAA firstSub: secondVar = BBBBB secondSub: firstVar = AAAAA Use of uninitialized value at test.pl line 19.

secondSub: secondVar = secondSub: firstVar = ccccC secondSub: secondVar = DDDDD firstSub: firstVar = ccccC

}

}

Ngày đăng: 27/04/2013, 09:13

HÌNH ẢNH LIÊN QUAN

Hình 1.1 Hình 1.1 - Lập trình CGI bằng Perl trên Linux
Hình 1.1 Hình 1.1 (Trang 8)
Bảng liệt kê các HTTP header có thể sử dụng - Lập trình CGI bằng Perl trên Linux
Bảng li ệt kê các HTTP header có thể sử dụng (Trang 15)
Hình vẽ : Sự tơng tác giữa form và CGI - Lập trình CGI bằng Perl trên Linux
Hình v ẽ : Sự tơng tác giữa form và CGI (Trang 17)
Hình vẽ minh họa phạm vi của biến trong Perl - Lập trình CGI bằng Perl trên Linux
Hình v ẽ minh họa phạm vi của biến trong Perl (Trang 34)
Bảng các ký tự đặc biệt trong Perl - Lập trình CGI bằng Perl trên Linux
Bảng c ác ký tự đặc biệt trong Perl (Trang 36)
Bảng điểm TN Kết quả học tập - Lập trình CGI bằng Perl trên Linux
ng điểm TN Kết quả học tập (Trang 45)
Bảng các dòng dữ liệu - Lập trình CGI bằng Perl trên Linux
Bảng c ác dòng dữ liệu (Trang 46)
Bảng điểm  tốt nghiệp - Lập trình CGI bằng Perl trên Linux
ng điểm tốt nghiệp (Trang 47)

TỪ KHÓA LIÊN QUAN

w