送受信_環境変数 ENV

ページの閲覧者が何もしなくても、ページを閲覧するだけで、閲覧者側のブラウザやサーバーが、CGI が置かれているサイト側のサーバーにいろいろなデータを送信しています。ここでは、これらを読み取って利用する方法を紹介します。

概観

  1. 下記を、手許の端末(RDE など)を使い、ruby として実行してみてください
    #!ruby
    p ENV
    
    • p は、内容をそのまま入力に使える形に表示します
    • ENV の中身がハッシュとして表示されたはずです
      ハッシュの例:{"apple" => "ringo", "grape" => "budou"}
    • ENV の内容は、ruby が実行されたときの環境を表すもので,環境変数と呼ばれています。使用中のPCやサーバーの仕様、ruby 実行時の状況等によっても内容は異なるものとなります。
  2. 上記のような表記では見づらいので、下記のように表示を整えてみましょう。CGI としても使えるように、ヘッダ部分も出力します。
    #!/usr/local/bin/ruby
    print <<EOS
    Content-Disposition: filename="env.txt"
    Content-type:        text/plain
    
    EOS
    puts   "%26s  %s" % [                       "key", "ENV[key]"                  ]
    puts   "%26s  %s" % ["--------------------------", "--------------------------"]
    for key in ENV.keys.sort do
      puts "%26s  %s" % [                        key ,  ENV[key]                   ]
    end
    puts   "%26s  %s" % ["--------------------------", "--------------------------"]
    • 以後このページではこの CGI を、env.cgi と呼ぶことにします
    • CGI としてアップロードし、接続してみて、手許の端末(RDEなど)から実行した結果と内容を比べてみてください
    • "%26s %s" % ["A", "B"]は、書式化文字列です
      • 配列 [ ] の中の要素を順番に%のある部分に代入して行きます
        プログラム:
        print "%6s-%s**%03d" % ["A", "B", 7]
        出力結果⇒
              A-B**007
      • %26s は、26文字分のスペースを確保して、文字列(s)を代入せよという意味です
      • % を使った、書式化文字列は、sprintfフォーマットと同じ意味です。詳細 ⇒ self % args , sprintfフォーマット
    • puts "%26s  %s" % ["A", "B"]
      は、printf を使って、
      printf("%26s  %s\n", "A", "B")
      と書くこともできます。\nは改行。
    • ENV.keysは ENV のキーを列挙した配列です。.sortをくっ付けて順番をアルファベット順に並べ替えています。 もしかしたら.sortをつけない方が見やすいかもしれません。
    • for 要素 in 配列 do 動作 end は、配列で与えられた要素を、次々とブロック do 〜 end に代入して実行させるものです。
      プログラム:
      for k in ["A","B"] do
       puts k
      end
      実行結果⇒
      A
      B
      プログラム:
      for n in 1..3 do
       puts n
      end
      実行結果⇒
      1
      2
      3
  3. よく使う環境変数とその意味は、たとえば、下記のようになっています(北大・教育用サーバーの場合)
    環境変数内容
    ENV['REQUEST_URI']接続に要求されたアドレス。アドレスの後ろにくっ付けられた「?」以降も表示。
    ENV['SCRIPT_NAME']CGIプログラム自身が置かれている場所/ファイル名。携帯端末に対するLocation適用に便利。
    ENV['SCRIPT_FILENAME']上記のサーバー内部での値。
    ENV['REMOTE_ADDR']閲覧者が受信に使っているサーバーのIPアドレス(数字の組)。たいていは使用しているプロバイダーが割り出せる。
    ENV['HTTP_REFERER']そのCGIに接続するためにクリックされたファイルの場所。「戻る」やリンク元の記録に便利。
    ENV['HTTP_USER_AGENT']閲覧者が使っているブラウザの名前。携帯電話の機種を自動判別するときなどに便利。
    ENV['QUERY_STRING']アドレスの後ろに付けた「?」以降の文字列。外部から CGI への値の入力に便利。
    ENV['HTTP_COOKIE']閲覧者のブラウザに保存してあった cookie の内容
    これらのキーの名前は、サーバーの設定によって変わることがあります。各自、自宅サーバーや、レンタルサーバー等を使う場合は、必ず事前に、env.cgi を実行して確認してください(ただし、HTTP_USER_AGENT,QUERY_STRING,HTTP_COOKIE に関しては、ほぼ間違いなく共通)。
  4. env.cgi の北大・教育用サーバーでの実行結果は例えば、下記のようになります(意味がわからなくても,心配ご無用!)
    実行結果

HTTP_USER_AGENT で閲覧者の端末の機種を判別

QUERY_STRING でコマンドを受け取る

以上です。

Last updated 09.Sep.2006 [ Home ] [ Up ] [ 質問メール ]
Copyright © 2005-2006 Shigeru Konno All Rights Reserved..