English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Rubyは一般的な言語であり、WEB開発に特化した言語ではなく、RubyはWEBアプリケーションやWEBツールの開発において最も一般的に使用されます。
Rubyを使用すると、独自のSMTPサーバー、FTPプログラム、またはRubyウェブサーバーを書けるだけでなく、RubyでCGIプログラミングもできます。
次に、RubyのCGIエディタリングについて少し学んでみましょう。
CGIがどのように動作するかをよりよく理解するために、ウェブページ上でリンクやURLをクリックするプロセスから始めてみましょう:
1、ブラウザを使用してURLにアクセスし、HTTPウェブサーバーに接続します。
2、Webサーバーがリクエスト情報を受け取り、URLを解析し、アクセスするファイルがサーバー上に存在するかどうかを確認し、存在する場合はファイルの内容を返し、存在しない場合はエラーメッセージを返します。
3、ブラウザがサーバーから情報を受け取り、受け取ったファイルまたはエラーメッセージを表示します。
CGIプログラムはRubyスクリプト、Pythonスクリプト、PERLスクリプト、SHELLスクリプト、CまたはC++のスクリプトなどです。++ プログラムなど。
CGIプログラミングを始める前に、ウェブサーバーがCGIをサポートしていて、CGIのハンドラが設定されていることを確認してください。
ApacheはCGI設定をサポートしています:
CGIディレクトリを設定します:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
すべてのHTTPサーバーがCGIプログラムを実行する預配置されたディレクトリが存在します。このディレクトリはCGIディレクトリと呼ばれ、慣習に従って、以下のように名付けられます:/var/www/cgi-binディレクトリ。
CGIファイルの拡張子は.cgiで、Rubyも.rb拡張子を使用できます。
デフォルトでは、Linuxサーバーが実行するCGIは-binディレクトリには/var/www。
CGIスクリプトを実行する他のディレクトリを指定したい場合は、httpd.conf設定ファイルを以下のように修正できます:
<Directory "/var/www/cgi-bin"> AllowOverride None Options +ExecCGI Order allow,deny Allow from all body>/Directory>
AddHandlerに.rbの接尾辞を追加すると、.rbで終わるRubyスクリプトファイルにアクセスできます:
AddHandler cgi-script.cgi.pl.rb
最も基本的なRuby CGIコードは以下の通りです:
#!/usr/bin/ruby puts "Content"-type: text/html\n\n" puts "<html><body>This is a test</body></html>"
你可以将该代码保持到 test.cgi 文件中,上次到服务器并赋予足够权限,即可作为 CGI 脚本执行。
如果你站的的地址为http://<form method="POST" action="http:/ ,即可用过http://<form method="POST" action="http:/test.cgi 访问该程序,输出结果为: "This is a test."。
浏览器访问该网址后,Web 服务器会在站点目录下找到 test.cgi文件,然后通过Ruby解析器来解析脚本代码并访问HTML文档。
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库可以通过两种方式获取表单提交(或URL中的参数)的数据, 例如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"]
如果表单包含了多个相同名称的字段,则该相同字段的值将保存在数组中。
以下示例中,指定表单中三个相同的字段"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.keys # => ["name"]
cgi.params # => {"name"=>["Zara", "Huma", "Nuha"]}注意:
Rubyは自動的にGETとPOSTメソッドを判断するため、これらのメソッドを区別する必要はありません。
以下は関連する HML コードです: <html> <body>//<form method="POST" action="http:/www.example.com test.cgi"> /<input type="submit" value="Submit Data" First Name :<input type="text" name="FirstName" value="" /<input type="submit" value="Submit Data" <br /<input type="submit" value="Submit Data" Last Name :<input type="text" name="LastName" value="" /<input type="submit" value="Submit Data" body>/> body>/form> body>/<
Form フォームと HTMLの作成 CGI パッケージには、HTMLを作成するための多くのメソッドが含まれており、各 HTML タグには対応するメソッドがあります。
これらのメソッドを使用する前に、CGI.new を介して CGI オブジェクトを作成する必要があります。
#!/usr/bin/ruby タグのネストをよりシンプルにするために、これらのメソッドは内容をコードブロックとして提供し、コードブロックはタグの内容として文字列を返します。以下のようになります: require "cgi"4cgi = CGI.new("html" }) 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 } } } }
URL 内のパラメータや HTML フォームデータを処理する際、指定された特殊文字をエスケープする必要があります。例えば、引用符(")やアンダースコア(\)などが含まれます。/)。
Ruby CGI オブジェクトは、CGI.escape と CGI.unescape メソッドを提供して、これらの特殊文字のエスケープを処理します:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/甘いと酸いガール
以上のコードの実行結果は以下の通りです:
#!/usr/bin/ruby require 'cgi' puts CGI.escape(Zara Ali/甘いと酸いガール
別の例:
#!/usr/bin/ruby require 'cgi' puts CGI.escapeHTML('<h1>Zara Ali/A Sweet & Sour Girl</h1>')
以上のコードの実行結果は以下の通りです:
<h1>Zara Ali/A Sweet & Sour Girl</h1>'
以下はRubyの完全なCGIクラスの関連メソッド
Ruby CGI - 標準CGIライブラリに関連するメソッド
Ruby CGI Cookies - CGI Cookieの処理方法
Ruby CGI セッション - CGI セッションの処理方法