グローバル変数

C++ for CGIは、次のようなグローバル変数を提供します。

説明

C++ for CGI は環境変数などをグローバル変数という使いやすい形で提供します。 しかし、フォームやクッキーからの変数は天下り変数として利用したほうが便利で す。
グローバル変数に値を代入することができますが、値の代入は無意味です。グロー バル変数は参照だけにしてください。

グローバル変数一覧

変数名説明
以下環境変数
string gCONTENT_LENGTHフォームからCGIプログラムへ送られてきたデータのバイト数
string gCONTENT_TYPEフォームからのデータのMIME形式の情報
string gHTTP_CLIENT_IPプロキシサーバーを利用しているクライアントIPアドレス
string gHTTP_COOKIEクライアントからCGIプログラムへ送られてきたクッキーの生データ
string gHTTP_FORMクライアントに設定されてるメールアドレス
string gHTTP_HOSTサーバのホスト名
string gHTTP_REFERERリンク元アドレス
string gHTTP_USER_AGENT利用OSやクライアントの名前、バージョン情報
string gQUERY_STRINGGETメソッド時の文字列
string gREMOTE_ADDRクライアントのIPアドレス
string gREMOTE_HOSTクライアントのホスト名
string gREQUEST_METHOD要求方法(POST/GET)
string gSCRIPT_NAMECGIスクリプト名
string gSERVER_ADDRサーバーのIPアドレス
string gSERVER_NAMEサーバー名
string gTZサーバ時計の設定地域
以下、C++ for CGIが用意する特別な変数
map <string,string> gRequest;環境変数、クッキー、CGI変数を格納した配列
gRequest["key"]として利用
map <string,string> gEnv;環境変数を格納した配列
gEnv["key"]として利用
map <string,string> gCookie;クッキーを格納した配列
gCookie["key"]として利用
map <string,string> gCGI;CGI変数を格納した配列
gCGI["key"]として利用
map <string,string> gConf;#configureで指定された初期設定ファイルの内容
gConf["key"]として利用
string gAPP_PATH;CGIプログラムのフルパス
string gAppName;CGIプログラムの名前
string gCGI_STRING;CGI(POST/GET)の生データ、分解もURLデコードもしていない

グローバル変数、gCGI , gEnv , gCookie , gConf は、map <string, string> で定義されています。gRequest はそれらすべてを合わせたものです。これらの変数 は、name=value の形で与えられていますので、gRequest["name"]=value の形で保 存されています。したがって、string str = gRequest["name"];で値を取り出すこ とができます。
gRequest は天下り変数を作るために、C++ for CGI が内部で 利用していますが、利用価値があると思われるのでグローバル変数として提供して います。

gRequest , gCGI , gEnv , gCookie , gConf に名前が定義されているかどうかを 調べるために、次のような文で検査したくなります。

//この方法では、nameという名前の変数があるかわからない
if(gCGI["name"] != "") {
.....
しかし、これらのグローバル変数は map と定義されていますので、gCGI["name"] とした時点で、name という key が生成されます。したがって、この方法で名前が 定義されているか検査することはできません。間違いやすいので注意してください。
フォームなどから変数が送られてきているかどうか調査するために、isset 関数群 が用意されています。

gRequestに格納される順番は、

  1. 環境変数 gEnv
  2. クッキー変数 gCookie
  3. フォームからの変数 gCGI
  4. 初期設定ファイル変数 gConf
の順です。もし、これらの変数に同じ名前を持つものがあれば、後に代入されたも のが有効です。

注意

  1. gCGI , gEnv , gCookie , gConfを使わずに、天下り変数を使ってください。C++のプログラムらしくなります。
  2. フォームなどの変数が定義されているかどうかはisset関数群を利用してください。