CGI: Cầu nối giữa Web server và chương trình ứng dụng trên Linux

MỤC LỤC

Tại sao dùng CGI ?

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ập trì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ào công nghệ CGI. Ví dụ, nếu chúng ta muốn viế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ột và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

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ị ở Web browser). - 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ên bả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).

Bảng liệt kê các HTTP header có thể sử dụng
Bảng liệt kê các HTTP header có thể sử dụng

Tóm lại

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

    - 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ục mặc. định này có tên là cgi-bin). Một ngời sử dụng muốn cài đặt chơng trình CGI của họ lên server 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. 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ằng phà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.

    Ví dụ chúng ta có chơng trình Hello.cgi trong th mục /home/httpd/cgi-bin và trên Web server mang tên www.athv.edu thì để gọi chơng trình Hello.cgi chúng ta sử dụng URL sau: http://www.athv.edu/cgi-bin/Hello.cgi. Hầu hết các chơng trình CGI đợc gọi thực hiện sau khi một form HTML đợc submit, chúng ta cầ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.

    I Giới thiệu

    Hello World [athv /root]#. 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. .) và đợc lu trữ dới dạng một file văn bản bình thờng. Theo cách này, chơng trình nguồn cũng đợc soạn thảo bằng một trình soạn thảo nào đó và đợc lu trữ dới dạng một file văn bản. Có hai điều cần lu ý: Thứ nhất, cờ có thể thực hiện (excuable) của file phải đợc thiết lập.

    Điều này là không nhất thiết đúng trong mọi hệ thống, ví nh hệ thống LINUX của chúng ta sử dụng ở đây đờng dẫn này là /usr/bin/perl. Nh vậy là chúng ta đã biết cách để viết và cho thực hiện một chơng trình bằng ngôn ngữ Perl.

    II Biến trong Perl

      Mảng liên hợp có cấu trúc giống nh mả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âu chuỗ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ố. Có thể đặt tên biến trùng nhau, một biến mảng có thể trùng với tê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ến mảng và mảng liên hợp sẽ bàn đến sau). Một biến trong Perl đợc xác định vào thời điểm thực hiện chơng trình, chúng ta sẽ nhận đợc một trong các giá trị sau: một xâu chuỗi, một con số, hoặc một con trỏ chỉ đến kiểu vô hớng.

      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ểm nào. Đ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).

      Hình vẽ minh họa phạm vi của biến trong Perl
      Hình vẽ minh họa phạm vi của biến trong Perl

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

      Mảng

      Sử dụng dấu $ và cặp dấu ngoặc vuông [] dùng để truy cập đến các thành phần của mảng thông qua chỉ mục của nó. Hàm này thực hiện công việc giống hàm push() là thêm phần thử vào mảng, chỉ khác ở chỗ unshift() thêm phần tử vào đầu danh sách. Theo cú pháp này, splice sẽ Loại bỏ các phần tử từ $position và với số phần tử là $length, không thêm vào mảng phần tử nào cả.

      Hàm split() Hàm split() cung cấp một phơng pháp để phân chia một biến vô hớng dới dạng một xâu chuỗi thành một mảng. Với vị trí các điểm cắt đợc chỉ ra bởi một biểu thức thờng (regular expression) hoặc một mẫu (pattern) nào đó.

      Mảng liên hợp ( associative array - hashes )

      Hàm join() thực hiện nối các phần tử của mảng lại với điểm nối là một ký tự đợc chỉ ra. Trả về danh sách các khoá của mảng liên hợp đợc đa ra bởi %hash_name, danh sách trả về dới dạng một mảng. Trả về danh sách các giá trị của mảng liên hợp đợc đa ra bởi %hash_name, danh sách trả về dới dạng một mảng.

      Hàm này trả về một cặp là khoá và trị tơng ứng của mảng liên hợp. Hàm delete() Cú pháp: delete $hash_name{key}.Xoá phần tử có khoá là key ra khỏi mảng liên hợp.

      I Đặt vấn đề

      Các đối tợng khai thác hệ thống

      Là những ngời trịu trách nhiêm trực tiếp về thông tin của sinh viên khoa mình trong một thời điểm xác định nào đó. - Cập nhật, thay đổi thông tin của sinh viên thuộc khoa mình - Nhập, cập nhật điểm của sinh viên khoa mình sau mỗi kỳ thi - Tính điểm trung bình, xét học bổng cho sinh viên trong khoa I.3.3 Sinh viên, gia đình sinh viên ( ngời dùng trên mạng). - Có thể xem trớc kế hoạch học tập, danh sách các môn học của tất cả các học kỳ I.3.4 Những thuận lợi và khó khăn.

      - Do hệ thống có nhiều ngời sử dụng, phân chia theo nhiều mức đặc quyền khác nhau nên việc đồng bộ dữ liệu gặp nhiều khó khăn. - Việc khai thác Internet của các đối tợng trong hệ thống cũng gặp nhiều khó do gia thành và điều kiện của nớc ta hiện nay.

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

        Cuối mỗi học kỳ, phải cho sinh viên thi hết môn hay làm đề tài môn học và báo cáo kết quả cho bộ hận giáo vụ khoa gồm các thông tin sau: họ tên sinh viên, số thẻ, môn thi, lần thi, ngày thi, điểm. Sau khi kết thúc môn học sinh viên chỉ đợc quyền thi hai lần, nếu cả hai lần thi điểm đều không đạt, sinh viên có thể đăng ký để học lại môn đó và lại có quyền thi thêm hai lần. Cuối mỗi học kỳ, bộ phận giáo vụ khoa sẽ tập hợp kết quả thi của từng lớp, in và công bố cho sinh viờn đợc rừ, sau đú gửi về cho phũng đào tạo và cụng tỏc chớnh trị.

        Cuối mỗi năm học, phòng đào tạo và công tác chính trị sẽ xét kết quả học tập của sinh viên trong năm đó và công bố danh sách sinh viên lu ban, ra trờng vĩnh viễn. Mỗi sinh viên thoả mãn điều kiện sau thì đợc lên lớp, ngợc lại thì lu ban hoặc ra trờng vĩnh viễn nếu đã lu ban một lần (tức là mỗi sinh viên chỉ đợc lu ban một lần trong suốt 5 năm học) hay điểm trung bình cả năm ≤ 4.00.

        Bảng điểm TN Kết quả học tập
        Bảng điểm TN Kết quả học tập

        KHOA MãKhoa

        Mô hình nhị nguyên

        Để đơn giản hóa việc xây dựng chơng chơng trình sau này, ta chuyển mô hình thực thể kết hợp về dạng mô hình nhị nguyên bằng cách thêm hai thực thể.

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

        Chọn công cụ

        Trong đề tài này tôi đã chọn một công cụ gọi là DBM (Database Manager) - một hệ thống th viện chuẩn của UNIX để lu trữ các tệp cơ sở dữ liệu. GDBM_File.pm-GNU's database interface files NDBM_File.pm-Berkeley UNIX compatibility ODBM_File.pm-Standard Perl package. Để sử dụng các th viện này trong chơng trình Perl chung ta thêm vào đầu chơng trình dòng sau đây.

        Để truy cập đến thông tin của các bản ghi chúng ta sử dụng các câu lệnh Perl. Các bản ghi trong cơ sở dữ liệu lúc này đợc ánh xạ vào mảng băm %handle với Khoá.

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

        Browser đăng nhập sử dụng chơng trình với quyền hạn cho phép có thể tạo, cập nhật sửa chữa trong các tập tin cơ sở dữ liệu. Để hiện thực hệ thống chơng trình này, cần có một máy Linux server, có cài đặt Apache Web server. Môi trờng mạng với các máy trạm có thể là máy chạy Linux, Unix, Winđows9X, 2000.

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

        Lý thuyết

        - Sử dụng thành công phần mềm Apache Server trên Linux hỗ trợ các ứng dụng CGI - Hiểu đợc công nghệ CGI và cách thức lập trình CGI trên Linux. - Tìm hiểu giao thức HTTP và các phơng thức của nó hỗ trợ lập trình trên mạng. - Biết cách lập trình bằng ngôn ngữ Perl trong môi trờng Linux theo công nghệ CGI phục vụ giải quyết bài toán truy cập các cơ sở dc liệu trong các bài toán.

        Phô lôc

        [12] Edward S.Peschko and Michele DeWolfe, Perl 5 Complete [13] Shishir Gundavaram, CGI Programming on the World Wide Web. Steve Burnett, Special Edition Using Linux, Fourth Edition [16] Bill Ball, Stephen Smoogen, Sams' Teach Yourself LINUX in 24 Hours [17] David Pitts, Linux Unleashed, Second Edition.