- ベストアンサー
環境変数に任意の文字列をセット(代入)してcgiへ送るには?
タイトル通りなのですが、環境変数に任意の文字列をセットしてcgiへそのセットした環境変数ごと送信するにはどうすればよいのでしょうか? 例えば、$ENV{'REQUEST_METHOD'}にABCとセットすれば、cgi側でREQUEST_METHODを参照するとABCが出てくるみたいな。(普通はPOSTやGETですが…) 環境変数を自由に設定できることは分かったのですが、いまいち設定の仕方が分かりません。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
別スレッド立てられたようなので、再度前回の投稿を確認しましたが http://oshiete1.goo.ne.jp/qa2519324.html ・ヘッダの書き方 と ・必須ヘッダ については書いていますが ・環境変数にある文字列をセットしてcgiに送信する ことは書いていませんでしたね と言うかperlから別のcgiへのサーバー間通信と言う趣旨は合ってますよね?? ならば結論から書きますと リクエストヘッダに x-適当なアルファベット: 任意の文字列 \r\n を追加してください。 Apacheはそれに対してさらに頭にHTTP_を付けます。 前回のサンプルで例えば 環境変数x-test001 に"abcd" と言う文字列を入れるのなら print S "x-test001: abcd\r\n"; # <=この行を追加 print S "Content-Length: $test_len\r\n\r\n"; # ヘッダの終端なので空行も出力 これで%ENV一覧表示するcgiにアクセスすれば $ENV{'HTTP_X_TEST001'} = abcd と成ります。 このとき半角英数字なら問題ありませんが日本語だと正常に受け渡しできるかどうかは 相手のサーバーなどの仕様にもよるので やはりurlエンコード等しておいたほうが無難だと思います。 尚、このような頭に HTTP_X_ のつく環境変数は自由に設定することが出来ますが 既存の環境変数だと $ENV{'PATH_INFO'} ↑ /~tarou/test.cgiが有って /~tarou/test.cgi/test01/test02 としてリクエストすると$ENV{'PATH_INFO'} には "/test01/test02" が入ります $ENV{'QUERY_STRING'} これは勿論GETでformやURL に?付きで送れますね それら以外の既存の環境変数に変な値を入れて送ってしまうと 相手のhttpd側でエラーが出たり、正しく処理されない可能性があります。
その他の回答 (1)
- ralf124c
- ベストアンサー率52% (232/446)
UNIXならシステムの設定ファイルや起動スクリプト中に埋め込み再起動させます。 Windowsならコントロールパネルから設定できたかと思います。 もしもCGI同士のお話しで、書き込みと読み取りが別々の処理で共有できるのかということなら、結論から言いますと「不可」だと思います。 なんの役に立つかはわかりませんが、同一CGI中の同一処理内で書き込み参照する分には「可」と思います。 ただ環境変数の中にはいじると大変なことになるものもありますので参照するだけにとどめておくのが吉です。 仮にAとBというユーザがいてAが勝手に変更した環境変数がBの環境に影響を及ぼすシステム(マルチユーザ)などもってのほかだと思います。 Webからのアクセスはその都度ログインログアウトを繰り返すようなものだと思ってください。 環境変数に関しての細かな説明はネット上で検索をすればでてきますのでそちらを参照してください。 CGIなどで値を他の処理に渡したいのなら処理内で共有できるファイルなどを利用するのが良いと思います。