- Ruby 基礎
- Ruby - 首頁
- Ruby - 概述
- Ruby - 環境設定
- Ruby - 語法
- Ruby - 類和物件
- Ruby - 變數
- Ruby - 運算子
- Ruby - 註釋
- Ruby - IF...ELSE
- Ruby - 迴圈
- Ruby - 方法
- Ruby - 程式碼塊
- Ruby - 模組
- Ruby - 字串
- Ruby - 陣列
- Ruby - 雜湊表
- Ruby - 日期和時間
- Ruby - 範圍
- Ruby - 迭代器
- Ruby - 檔案 I/O
- Ruby - 異常
Ruby Web 應用程式 - CGI 程式設計
Ruby 是一種通用語言;它根本不能被恰當地稱為Web 語言。即便如此,Web 應用程式和一般的 Web 工具仍然是 Ruby 最常見的用途之一。
您不僅可以用 Ruby 編寫自己的 SMTP 伺服器、FTP 守護程式或 Web 伺服器,還可以使用 Ruby 執行更常見的任務,例如 CGI 程式設計或替換 PHP。
請花幾分鐘時間閱讀 CGI 程式設計 教程,以獲取有關 CGI 程式設計的更多詳細資訊。
編寫 CGI 指令碼
最基本的 Ruby CGI 指令碼如下所示:
#!/usr/bin/ruby puts "HTTP/1.0 200 OK" puts "Content-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
如果您將此指令碼命名為test.cgi並將其上傳到具有正確許可權的基於 Unix 的 Web 託管提供商,則可以將其用作 CGI 指令碼。
例如,如果您在 Linux Web 託管提供商處託管了網站 https://www.example.com/,並將test.cgi上傳到主目錄並賦予其執行許可權,那麼訪問 https://www.example.com/test.cgi 應該會返回一個 HTML 頁面,顯示這是一個測試。
這裡,當從 Web 瀏覽器請求test.cgi時,Web 伺服器會在網站上查詢test.cgi,然後使用 Ruby 直譯器執行它。Ruby 指令碼返回一個基本的 HTTP 標頭,然後返回一個基本的 HTML 文件。
使用 cgi.rb
Ruby 帶有一個名為cgi的特殊庫,它允許進行比前面 CGI 指令碼更復雜的互動。
讓我們建立一個使用 cgi 的基本 CGI 指令碼:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new puts cgi.header puts "<html><body>This is a test</body></html>"
在這裡,您建立了一個 CGI 物件並使用它為您列印標頭行。
表單處理
使用 CGI 類,您可以透過兩種方式訪問 HTML 查詢引數。假設我們給出了一個 URL /cgi-bin/test.cgi?FirstName=Zara&LastName=Ali。
您可以使用 CGI#[] 直接訪問引數FirstName和LastName,如下所示:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi['FirstName'] # => ["Zara"] cgi['LastName'] # => ["Ali"]
還有另一種訪問這些表單變數的方法。此程式碼將為您提供所有鍵和值的雜湊表:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
h = cgi.params # => {"FirstName"=>["Zara"],"LastName"=>["Ali"]}
h['FirstName'] # => ["Zara"]
h['LastName'] # => ["Ali"]
以下是如何檢索所有鍵的程式碼:
#!/usr/bin/ruby require 'cgi' cgi = CGI.new cgi.keys # => ["FirstName", "LastName"]
如果表單包含多個具有相同名稱的欄位,則相應的將在指令碼中作為陣列返回。[] 訪問器僅返回其中的第一個。索引 params 方法的結果以獲取所有值。
在此示例中,假設表單有三個名為“name”的欄位,我們輸入了三個名稱“Zara”、“Huma”和“Nuha”:
#!/usr/bin/ruby
require 'cgi'
cgi = CGI.new
cgi['name'] # => "Zara"
cgi.params['name'] # => ["Zara", "Huma", "Nuha"]
cgi.keys # => ["name"]
cgi.params # => {"name"=>["Zara", "Huma", "Nuha"]}
注意 - Ruby 將自動處理 GET 和 POST 方法。這兩種不同方法沒有單獨的處理方式。
一個相關的基本表單,可以傳送正確的資料,其 HTML 程式碼如下所示:
<html>
<body>
<form method = "POST" action = "http://www.example.com/test.cgi">
First Name :<input type = "text" name = "FirstName" value = "" />
<br />
Last Name :<input type = "text" name = "LastName" value = "" />
<input type = "submit" value = "Submit Data" />
</form>
</body>
</html>
建立表單和 HTML
CGI 包含大量用於建立 HTML 的方法。您會發現每個標籤對應一個方法。為了啟用這些方法,您必須透過呼叫 CGI.new 建立一個 CGI 物件。
為了使標籤巢狀更容易,這些方法將其內容作為程式碼塊。程式碼塊應返回一個字串,該字串將用作標籤的內容。例如:
#!/usr/bin/ruby
require "cgi"
cgi = CGI.new("html4")
cgi.out {
cgi.html {
cgi.head { "\n"+cgi.title{"This Is a Test"} } +
cgi.body { "\n"+
cgi.form {"\n"+
cgi.hr +
cgi.h1 { "A Form: " } + "\n"+
cgi.textarea("get_text") +"\n"+
cgi.br +
cgi.submit
}
}
}
}
注意 - CGI 類的form方法可以接受一個 method 引數,該引數將設定在表單提交時使用的 HTTP 方法(GET、POST 等)。在此示例中使用的預設方法是 POST。
這將產生以下結果:
Content-Type: text/html
Content-Length: 302
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Final//EN">
<HTML>
<HEAD>
<TITLE>This Is a Test</TITLE>
</HEAD>
<BODY>
<FORM METHOD = "post" ENCTYPE = "application/x-www-form-urlencoded">
<HR>
<H1>A Form: </H1>
<TEXTAREA COLS = "70" NAME = "get_text" ROWS = "10"></TEXTAREA>
<BR>
<INPUT TYPE = "submit">
</FORM>
</BODY>
</HTML>
引用字串
在處理 URL 和 HTML 程式碼時,必須小心地引用某些字元。例如,斜槓字元 (/) 在 URL 中具有特殊含義,因此如果它不是路徑名的一部分,則必須對其進行轉義。
例如,URL 查詢部分中的任何 / 都將轉換為字串 %2F,並且必須將其轉換回 / 才能使用它。空格和&也是特殊字元。為了處理這種情況,CGI 提供了CGI.escape和CGI.unescape例程。
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/A Sweet & Sour Girl")
這將產生以下結果:
Zara+Ali%2FA Sweet+%26+Sour+Girl")
#!/usr/bin/ruby
require 'cgi'
puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
這將產生以下結果:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
CGI 類中的有用方法
以下是與 CGI 類相關的方法列表:
有關標準 CGI 庫相關方法,請參閱 Ruby CGI 。
Cookie 和會話
我們在不同的章節中解釋了這兩個概念。請參閱以下章節:
有關如何處理 CGI Cookie,請參閱 Ruby CGI Cookie 。
有關如何管理 CGI 會話,請參閱 Ruby CGI 會話 。
Web 託管伺服器
您可以在網際網路上檢視以下主題,以瞭解如何在基於 Unix 的伺服器上託管您的網站: