• ベストアンサー

ファイル間の変数引き継ぎ方法を教えてください。

初心者です。初歩的な内容ですみません。 cgiのファイル間で変数を引き継ぎたいです。 入力.html  (postで変数を引継ぎ)  ↓ 処理1.cgi (html吐き出しなし)(変数追加・改めてpostのような形で引継ぎ)  ↓ 処理2.cgi (変数利用) cookieや ファイル名.cgi?key=変数 と言う形ではなく htmlのpostのようなことをcgiでもやりたいです。 よろしくご指導お願いいたします。

  • CGI
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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 ファイルに書いておかなければならない決まりは ありませんよ。 以前似たようなご質問に私が答えたものも参考として下記にあげておきます。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=73057
pion16
質問者

お礼

分かりやすいご説明のうえ、さらに応用まで教えていただけたので、次に作成したかったcgiの分も目処がたちました。ありがとうございました。

その他の回答 (1)

  • burn
  • ベストアンサー率65% (25/38)
回答No.1

何がしたいのかがいまいち判りませんが、 CGIスクリプトの場合、HTMLを吐き出さないと エラーになりますよ。 サブルーチンとして、外部スクリプトを用いたい場合は plファイルを作って、CGIの中で呼び出せば動きます。 plファイルには変数の受け渡しをする事はできますよ。 WEBですから、最終的にHTMLを吐き出す必要があると思いますが・・・・

pion16
質問者

お礼

ありがとうございます。 処理のみのcgiをplファイルにすることで、 やりたかった動作が実現できました。

関連するQ&A

  • CGI→CGI変数の引き継ぎはどうするのですか?

    初歩的な質問ですがよろしくお願いします。 画面から入力した変数は「GET」などでCGIに値を引き継ぎますが、CGIから別のCGIを起動して最初のCGIでファイルから読み込んだ値や代入された変数を次のCGIに引き継ぐにはどのようにすればよろしいのでしょうか?よろしくお願いします。

    • ベストアンサー
    • CGI
  • コントロールパネルを設置し、そこで変数を変更できるようにしたいのですが

    コントロールパネル(ホームページ上)から(エディタで開くことなく)変数を変更できるようにしたいと考えております。どのような方法で実現するのがよいか、教えていただけませんでしょうか。 コントロールパネルから入力されたデータを、FORMでCGIに送信し、変数ごとにそれぞれのファイルに保存しておく方法しか思いつきません。しかし、メインのCGIを実行するときに、それぞれのファイルを開き、保存されているデータを変数に入れていくとなると、(よく分からないのですが)処理速度が落ちたり、エラーが出る確率が高くなるのではないかと心配しております。一般的にはどのような方法で、コントロールパネルを実現しているのでしょうか。 CGI(perl)初心者のため、なにかサンプル等ありましたら、あわせて教えていただけると助かります。恐れ入りますがよろしくお願いいたします。

    • ベストアンサー
    • CGI
  • javascript→CGIへの変数の受け渡し

    今作っているページで プロンプトかフォームに名前とコメントを入力させ その入力した情報をjavascriptの変数に入れ、その変数ごとCGIに送りCGIでテキストファイルに追加保存して表示する。 という強制ゲストブックもどきを作っているのですが javaの変数をCGIに送る方法がわかりません。 前の質問を元にして自分で作ってみましたが、サーバーが見つかりませんと表示されてしまいました。

    • 締切済み
    • CGI
  • cgiの変数をhdmlに渡すことはできますか?

    hdmlコンテンツを作成しているのですが、hdmlのファイル#1からgosubでcgiのファイル*1に行き、printをつかってhdmlのファイル#2を表示しています。そのファイル#2にcgiのファイル*1で処理した変数を渡し、再びcgiのファイル*1に行きたいのですが、うまく行きません。 このような処理は不可能でしょうか? 下記のソースの$s1,$s2の部分が処理した変数になります。 print "Content-type:text/x-hdml;charset=Shift_JIS\n\n"; print <<"EOT"; <HDML VERSION="3.0" PUBLIC="TRUE"> <display name="test"> 進む <action type=accept task=gosub dest=*1.cgi label=進む method=post postdata=s1=$s1&s2=$s2> </display> </HDML> EOT

    • 締切済み
    • CGI
  • バッチファイルへの変数のキー入力、変数名を含むファイルへの出力

    とあるヘッダーの作成のため、キー入力した値で、変数名を含む名前のテキストに変数の入ったファイルを書き出そうと思うのですが、どなたかアドバイスいただけますでしょうか。 いまのところ次のような感じで、%num%という変数に数字を入れるようにしたいのですが。 SET/P %num% = 数字を入力してください:  echo right: %num% >> header%num%.txt echo leftt: %num% >> header%num%.txt また、バッチファイルのサンプルが多く載っている書籍等の紹介でもかまいませんどうぞよろしくお願いします。

  • ファイル名を変数に取り込む方法について

    vbを使った例を教えてください。 ある指定されたフォルダーに複数のファイルがあるとして、 そのファイル名を変数に順番に取り込むプログラムの 参考がありましたら教えてください。 尚、プログラムでは、取り込んだ後に別の処理があり、 それが終了後にまた次のファイル名を取り込むような ステップを組む予定にしています。 こんな質問でご理解頂けますでしょうか? 宜しくお願い致します。

  • Automatorで変数を使ったファイル検索

    Automatorを使って、毎日決まった時間にファイルのコピーをしたいのですが、手順がいまいちわからないので教えて下さい。 ファイル名は「当日の日付+15+文字列」で、日付の部分が変動します。 そこで、Automatorの「日付と時刻」変数から、必要な形式yymmddとなるように変数を作成しました。 変数名は「folderName」としました。 1)この変数はいつでも呼び出せるように保存するにはどうしたらよいですか? Automatorのカレンダーアラームで、以下のようにワークフロー(?)を作りました。 ------------------------- ・変数の値を取得   →上記のyymmddとなる日付 ・Finder項目を検索   →検索条件 「名前」 が 「folderName」 を含む    変数名は手で入力しました ・フォルダの内容を取得 ・Finder項目をコピー ------------------------- 一連の動作を確認すると、以下のようなログが残っていました。 ・変数の値を取得  完了 ・Finder項目を検索  完了 ・フォルダの内容を取得  完了 -1warning  アクション”フォルダの内容を取得”に必要なデータがありません。 ・Finder項目をコピー  完了 -1warning  アクション”Finder項目をコピー”に必要なデータがありません。 2)検索するファイル名のところに、手打ちで変数名を入れたことが間違っているように思うのですが、変数名はどのようにして指定したらよいですか? 初歩的な質問かと思いますが、ご指導宜しくお願いします。

    • ベストアンサー
    • Mac
  • ファイルを読み込んで変数へ

    VB初心者です。 ファイルの文字列を読み込んで、変数に格納し、SQL文のテーブル名に指定したいのですが、どうすればよいのでしょうか? テキストから文字列を取得するところまではできたのですが、変数にもって、SQL文に組み込むことができません。実行すると「テーブル名が無効です。」とエラーになります。 どうか、皆様ご教授ください。

  • Prompt入力値をphp変数として取込む方法

    Promptの入力値をphpの変数として取込む方法がわかりません。 以下の様にPromptの入力値をphpの変数として取込み、所定の処理を行いたいと考えています。しかしPromptの入力値"pw"をphpに取込む事が出来ません。ご教授ください。 ※File名=test_prompt.php <HTML> <HEAD> </HEAD> <BODY> <FORM action="test_prompt.php" method="POST"> <INPUT type="image" value="pasword" onclick="pw=prompt('パスワードを入力して下さい');" src="img/del.gif"> </FORM> <br><br> <?php $pw=$_POST['pw']; echo "PW=".$pw; ?> </BODY> </HTML>

    • 締切済み
    • PHP
  • Perlでのマッチング処理について

    検索CGIを作成しているのですが、検索文字に「ー」(-ハイフンではありません。日本語入力の言葉を伸ばすやつです。”サーバ”とか。)が入った文字を指定し、POSTするとServerErrorになってしまいます。サーバはレンタルものなので原因が分からず途方にくれています。どなたかPerlに詳しい方、ぜひよいアドバイスを下さい。ちなみに処理は下記のように行っています。 (1)検索する元のデータはsjisである。  ↓ (2)ブラウザのフォームから、検索したいデータがsjisでPOSTされる。  ↓ (3)ReadParseにてデータを変数へ取り込む。(cgi-lib.pl使用)  ↓ (4)CGIにて、POSTされたデータをeucへ変換。(jcode.pl使用)  ↓ (5)検索する元のデータが入ったファイルをオープン。  ↓ (6)ファイルから1行づつ読み込み変数へ格納。  ↓ (7)変数へ格納したデータをeucへ変換。  ↓ (8)if (${POSTされたデータ} =~ /${ファイルから読み込んだデータ}/)といった形でマッチング処理  ↓ (9)ファイルをクローズし、マッチングしたデータをsjisで結果表示。 ※まだデバッグ途中なのですが、とりあえず今判明しているのは 『インターネット』などというふうに、『ー』がキーに入るとエラーになります。 どなたかよろしくお願いします。

    • ベストアンサー
    • Perl