- ベストアンサー
ファイル間の変数引き継ぎ方法を教えてください。
初心者です。初歩的な内容ですみません。 cgiのファイル間で変数を引き継ぎたいです。 入力.html (postで変数を引継ぎ) ↓ 処理1.cgi (html吐き出しなし)(変数追加・改めてpostのような形で引継ぎ) ↓ 処理2.cgi (変数利用) cookieや ファイル名.cgi?key=変数 と言う形ではなく htmlのpostのようなことをcgiでもやりたいです。 よろしくご指導お願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
素直に、処理1.cgiのなかで処理2.cgiを呼び出せば良いでしょう。 この二つのCGIプログラムは同じサーバにあるんですよね? 処理2.cgiの標準入力に、パラメータを追加した文字列を流し込んでやれば いいと思います。ほかにいくつか環境変数をセットすれば動作するでしょう。 たとえばPerlなら、処理1.cgiはこんな感じになるのでは? read(STDIN, $query_string, $ENV{CONTENT_LENGTH}); # POSTでパラメータを取得 $query_string .= '&a=123&b=xyz'; # パラメータを追加 $ENV{CONTENT_LENGTH} = length($query_string); $ENV{REQUEST_METHOD} = 'POST'; open(OTHER_CGI, "|./shori2.cgi") or die "$!"; print OTHER_CGI $query_string; close(OTHER_CGI); ただ、普通はこういう風には設計しません。処理1、処理2で共通の部分を まったく別の xxx.pl などという形でファイルにまとめておきます。 そして、shori1.cgi, shori2.cgiではパラメータをちょっと調整するだけの 機能を記述して、あとはxxx.plの中の関数にやってもらうようにします。 つまりこんな感じですね。 入力.html (postで変数を引継ぎ) ↓ 処理1.cgi (html吐き出しあり)変数調整後xxx.plの関数呼び出し ↓ xxx.pl (実際の処理) 入力2.html (postで変数を引継ぎ) ↓ 処理2.cgi (html吐き出しあり)変数調整後 xxx.plの関数呼び出し ↓ xxx.pl (実際の処理) たとえば吐き出すhtmlの内容がほぼ同じ、とかそういうことならそのhtmlを 吐く部分を sub print_output { } でまとめてxxx.plに書いておき、両方の.cgiから実行できるようにするとか。 こうすれば、処理1、処理2の違いはサブルーチンを呼び出すときの引数を 変えれば済むことになります。 なんでもかんでも *.cgi ファイルに書いておかなければならない決まりは ありませんよ。 以前似たようなご質問に私が答えたものも参考として下記にあげておきます。
その他の回答 (1)
- burn
- ベストアンサー率65% (25/38)
何がしたいのかがいまいち判りませんが、 CGIスクリプトの場合、HTMLを吐き出さないと エラーになりますよ。 サブルーチンとして、外部スクリプトを用いたい場合は plファイルを作って、CGIの中で呼び出せば動きます。 plファイルには変数の受け渡しをする事はできますよ。 WEBですから、最終的にHTMLを吐き出す必要があると思いますが・・・・
お礼
ありがとうございます。 処理のみのcgiをplファイルにすることで、 やりたかった動作が実現できました。
お礼
分かりやすいご説明のうえ、さらに応用まで教えていただけたので、次に作成したかったcgiの分も目処がたちました。ありがとうございました。